cocoa - NSFileManager contentOfDirectoryAtPath 与 samba 路径的编码问题

标签 cocoa encoding samba nsfilemanager

我使用此代码挂载 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/

相关文章:

objective-c - 从 NSImageView 中的 Controller 对象获取实例( cocoa )

ios - 单例 : Pros, 缺点,设计问题

objective-c - 有没有办法以编程方式检查用户在 Mac 上选择 "Require password after sleep"?

json - Encoding.com 转码速度

java - 如何在 X509 中编码专有的非对称公钥

linux - Samba 给出 "Function not implemented"错误

cocoa :调整分割 View subview 的大小

linux - 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

linux - smbclient linux/os x nt_status_pipe_broken

java - 将本地文件夹复制到 SMB 服务器文件夹