Cocoa NSFileManager内容目录ATPATH编码问题与samba路径

Cocoa NSFileManager内容目录ATPATH编码问题与samba路径,cocoa,encoding,samba,nsfilemanager,Cocoa,Encoding,Samba,Nsfilemanager,我使用此代码装载SMB路径 urlStringOfVolumeToMount = [urlStringOfVolumeToMount stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding]; NSURL *urlOfVolumeToMount = [NSURL URLWithString:urlStringOfVolumeToMount]; FSVolumeRefNum returnRefNum; FSMount

我使用此代码装载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编码的üchar。以字节为单位,它应该是c3bc

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

如果有人能帮忙,谢谢

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

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

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

您需要的是合成字符和分解序列

由于您是从文件系统获取路径名的,所以这不是问题:当您接收路径名时,路径名是正确的,只要您将它们传递给正确使用Unicode的对象,它们也会正确显示

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

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

您需要的是合成字符和分解序列


既然您是从文件系统获取路径名,这就不是问题:当您接收路径名时,路径名是正确的,并且只要您将它们传递给正确使用Unicode的对象,它们也会正确显示。

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

NSString内置了必要的比较器

aString
与另一个字符串进行比较,其中一个字符串来自NSFileManager返回的数组
contentsOfDirectoryAtPath:
非常简单:
if([aString compare:anotherString]==sensorderedname)


compare方法负责将两个字符串转换为可比较的规范格式。事实上,让他们“如果他们看起来一样,他们也是一样的”

好吧,四年后,我在为同样的事情而挣扎,但对我来说,这是一个问题。
花了很多时间找到了简单的解决方案

NSString内置了必要的比较器

aString
与另一个字符串进行比较,其中一个字符串来自NSFileManager返回的数组
contentsOfDirectoryAtPath:
非常简单:
if([aString compare:anotherString]==sensorderedname)


compare方法负责将两个字符串转换为可比较的规范格式。实际上,让他们“如果他们看起来一样,他们也一样”

感谢您的回复。在urlStringOfVolumeToMount中使用MacRoman而不是utf-8没有特殊的原因。我会改变这个。我从中得到的字符串被写入另一个系统的文件中。字符串是指向电影的路径,该电影在分解角色时不会打开)。那里有一个有趣的帖子:。我最终通过将utf-8中的特殊字符从u转义到%c3%bc,然后从这个字符串中获取一个NSData来解决我的问题,构建字节,处理这个转义的字符,以便响应。在urlStringOfVolumeToMount中使用MacRoman而不是utf-8没有特殊的原因。我会改变这个。我从中得到的字符串被写入另一个系统的文件中。字符串是指向电影的路径,该电影在分解角色时不会打开)。那里有一个有趣的帖子:。我最终通过将utf-8中的特殊字符从ü转义到%c3%bc,然后从这个字符串中获取一个NSData来解决我的问题,并构造字节来处理这个转义字符
urlStringOfVolumeToMount = [urlStringOfVolumeToMount stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding];
NSMutableArray *content = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];