2010-11-06 61 views
1

我使用此代码
与桑巴路的NSFileManager contentsOfDirectoryAtPath编码的问题

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

然后安装一个SMB路径,我得到的一些路径的内容:

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

我的问题是在每一个路径“内容“数组包含特殊字符(ü例如)给我2个字符编码:ü成为ü

当我记录字节使用:

[contentItem dataUsingEncoding:NSUTF8StringEncoding];

它给了我:75cc88这是U(75)和¨(CC88)

我期待什么是UTF-8编码的字符ü。以字节为单位,它应该是c3bc

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

如果有人能帮助,谢谢

我的配置:定位于法国和使用雪豹。

回答

0
urlStringOfVolumeToMount = [urlStringOfVolumeToMount stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding]; 

除非特别需要针对的MacRoman由于某种原因,你或许应该使用UTF-8在这里。

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

我的问题是在包含特殊字符“内容”阵列(ü为例)给我的每路2个字符编码:ü成为ü

你希望组成的字符和获取分解的序列。

由于您从文件系统获取路径名,这不是一个问题:路径名正确,因为您收到它们,并且只要您将它们传递给Unicode正确的地方,它们就会也正确显示。

+0

感谢您的回应。在urlStringOfVolumeToMount中使用MacRoman而不是utf-8没有特别的理由。我会改变这一点。我从中得到的字符串被写入另一个系统的文件中。该字符串是一个电影的路径,如果字符被分解,它不会打开)。有一个有趣的帖子:http://discussions.info.apple.com/thread.jspa?threadID=2632226&start=15&tstart=0。我终于解决了我的问题,将UTF-8中的特殊字符从ü转换为%c3%bc,然后从此字符串获取NSData,从而构建字节来处理此转义字符 – niko34 2010-11-07 08:35:43

0

好吧,四年后,我在同样的事情上挣扎,但对我来说åäö。
花了很多时间找到简单的解决方案。 。

的NSString有必要比较内置

比较aStringanotherString从哪里来通过NSFileManagers contentsOfDirectoryAtPath:返回的数组是简单的:
if([aString compare:anotherString] == NSOrderedSame)

的比较方法需要做的护理这两个字符串都变成了可比的规范格式。实际上让他们“如果他们看起来相同,他们是相同的”