2

我使用此代码安装 SMB 路径

urlStringOfVolumeToMount = [urlStringOfVolumeToMount stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding];
NSURL *urlOfVolumeToMount = [NSURL URLWithString:urlStringOfVolumeToMount];
FSVolumeRefNum returnRefNum;
FSMountServerVolumeSync( (CFURLRef)urlOfVolumeToMount, NULL, NULL, NULL, &returnRefNum, 0L);

然后,我得到一些路径的内容:

NSMutableArray *content = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];

我的问题是包含特殊字符的“内容”数组中的每条路径(例如ü)给我2个字符编码:ü变成u¨

当我使用以下方式记录字节时:

[contentItem dataUsingEncoding:NSUTF8StringEncoding];

它给了我:75cc88,即 u (75) 和 ¨(cc88)

我期望的是用 utf-8 编码的 ü char。以字节为单位,应该是 c3bc

我尝试使用 ISOLatin1 编码转换我的路径,MacOSRoman ...但只要内容路径已经有 2 个单独的字符而不是 ü,任何转换都会给我 2 个字符编码...

如果有人可以帮忙,谢谢

我的配置:法语本地化并使用雪豹。

4

2 回答 2

0
urlStringOfVolumeToMount = [urlStringOfVolumeToMount stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding];

除非您出于某种原因特别需要 MacRoman,否则您可能应该在这里使用 UTF-8。

NSMutableArray *content = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];

我的问题是包含特殊字符的“内容”数组中的每条路径(例如ü)给我2个字符编码:ü变成u¨

您期待组合字符并获得分解的序列。

由于您从文件系统获取路径名,这不是问题:路径名在您接收它们时是正确的,只要您将它们传递给正确执行 Unicode 的东西,它们也会正确显示.

于 2010-11-06T21:13:19.033 回答
0

好吧,四年后,我也在为同样的事情而苦苦挣扎,但在我的情况下是为了 åäö。
花了很多时间找到简单的解决方案。

NSString 内置了必要的比较器。

比较aStringNSFileManagersanotherString返回的数组的位置contentsOfDirectoryAtPath:很简单:
if( [aString compare:anotherString] == NSOrderedSame )

compare 方法负责将两个字符串都转换为可比较的规范格式。实际上使它们“如果它们看起来相同,它们就是相同的”

于 2014-07-08T16:46:24.353 回答