Cocoa NSTask字符串编码问题

Cocoa NSTask字符串编码问题,cocoa,encoding,nstask,Cocoa,Encoding,Nstask,在我的程序中,我通过NSTask进行grep。出于某种原因,有时我不会得到任何结果(尽管代码显然与从CLI运行的命令相同,但运行得很好),因此我检查了我的代码,在Apple的文档中发现,在向NSTask对象添加参数时,“NSTask对象将path和参数中的字符串转换为适当的C样式字符串(使用fileSystemRepresentation),然后通过argv[]”()将它们传递给任务 问题是,我可能会对“Río Gallegos”这样的术语进行grep处理。遗憾的是(正如我使用fileSyste

在我的程序中,我通过NSTask进行grep。出于某种原因,有时我不会得到任何结果(尽管代码显然与从CLI运行的命令相同,但运行得很好),因此我检查了我的代码,在Apple的文档中发现,在向NSTask对象添加参数时,“NSTask对象将path和参数中的字符串转换为适当的C样式字符串(使用fileSystemRepresentation),然后通过argv[]”()将它们传递给任务

问题是,我可能会对“Río Gallegos”这样的术语进行grep处理。遗憾的是(正如我使用fileSystemRepresentation检查的那样),经过转换后的结果是“RiÃÅo Gallegos”

我怎样才能解决这个问题

--雷

问题是,我可能会对“Río Gallegos”这样的术语进行grep处理。遗憾的是(正如我使用fileSystemRepresentation检查的那样),经过转换后的结果是“RiÃÅo Gallegos”

这是一种可能的解释。你的意思是“Río Gallegos”被转换为“Ri
\xcc\x81
o Gallegos”-UTF-8字节来表示分解的i+组合急性重音

您的问题是grep没有将这些字节解释为UTF-8。显然,grep正在使用其他编码,MacRoman

解决方案是告诉grep使用UTF-8。这需要在grep任务的列表中设置
LC\u ALL
变量


要使用的快速且不干净的值是“en_US.UTF-8”;更合适的方法是获取用户主语言的语言代码,用下划线替换连字符(如果有),并粘贴“.UTF-8”最后。

谢谢你的回答,但它不起作用……我还尝试在grep任务的环境中设置LC_CTYPE和LANG变量,但仍然没有成功。你是如何确定grep正在以你在问题中显示的方式解释字节的?通过NSString的fileSystemRepresentation方法和NSLog()语句。实验表明,只有不带“非标准”字符的字符串(如“í”)才能工作。我认为这不是证据,但它是有力的证据。您如何查看NSLog输出?使用XCode中的调试器控制台。