我使用此代码挂载 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];
我的问题是“content”数组中包含特殊字符(例如ü)的每个路径给我2个编码字符:ü变成uì
当我使用以下方式记录字节时:
[contentItem dataUsingEncoding:NSUTF8StringEncoding];
它给了我:75cc88,即 u (75) 和 ¡(cc88)
我期望的是 utf-8 编码的 ü 字符。以字节为单位,应该是c3bc
我尝试使用 ISOLatin1 编码、MacOSRoman 转换我的路径...但只要内容路径已经有 2 个单独的字符而不是 ü 的一个,任何转换都会给我编码 2 个字符...
如果有人能帮忙,谢谢
我的配置:本地化为法语并使用雪豹。
最佳答案
urlStringOfVolumeToMount = [urlStringOfVolumeToMount stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding];
除非您出于某种原因特别需要 MacRoman,否则您可能应该在此处使用 UTF-8。
NSMutableArray *content = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];
My problem is every path in "content" array containing special chars (ü for example) give me 2 chars encoded : ü becomes u¨
您期待的是组合字符并得到分解的序列。
由于您是从文件系统获取路径名,所以这不是问题:当您接收路径名时,路径名是正确的,并且只要您将它们传递给正确执行 Unicode 的东西,它们就会显示也正确。
关于cocoa - NSFileManager contentOfDirectoryAtPath 与 samba 路径的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112782/