我使用此代码安装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,你是(75)和¨(cc88)
我期望的是utf-8编码的ü字符。以字节为单位,应为c3bc
我尝试使用ISOLatin1编码转换我的路径,MacOSRoman ...但只要内容路径已经有2个单独的字符而不是ü,任何转换都会给我2个字符编码...
如果有人可以提供帮助,谢谢
我的配置:使用法国本地化并使用雪豹。
答案 0 :(得分:0)
urlStringOfVolumeToMount = [urlStringOfVolumeToMount stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding];
除非您出于某种原因特别需要MacRoman,否则您应该在这里使用UTF-8。
NSMutableArray *content = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];
我的问题是包含特殊字符的“content”数组中的每个路径(例如ü)给我编码2个字符:ü变成u¨
你期待组合字符和分解序列。
由于您从文件系统获取路径名,这不是问题:路径名是正确的,因为您正在接收它们,并且只要您将它们传递给正确执行Unicode的路径,它们就会显示也正确。
答案 1 :(得分:0)
嗯,四年后我在同样的事情上挣扎,但在我的情况下åäö 花了很多时间才找到简单的解决方案。
NSString内置了必要的比较器。
将aString
与anotherString
进行比较,其中一个来自NSFileManagers contentsOfDirectoryAtPath:
返回的数组,其简单如下:
if( [aString compare:anotherString] == NSOrderedSame )
compare方法负责将两个字符串转换为可比较的规范格式。实际上使它们“如果看起来一样,它们是相同的”