在我的程序中,我正在通过NSTask复制代码。出于某种原因,有时我没有任何结果(即使代码显然与从CLI运行的命令相同,也可以正常工作),所以我检查了一下代码,并在Apple文档中发现,向NSTask对象,“ NSTask对象将路径和参数中的字符串都转换为适当的C样式的字符串(使用fileSystemRepresentation),然后再通过argv []将它们传递给任务”(snip)。

问题是我可能会重复使用“RíoGallegos”之类的术语。可悲的是(正如我与fileSystemRepresentation一起检查的那样),它进行了转换,结果是“RiÃoGallegos”。

我该如何解决?

-Ry

最佳答案

问题是我可能会重复使用“RíoGallegos”之类的术语。可悲的是(正如我与fileSystemRepresentation一起检查的那样),它进行了转换,结果是“RiÃoGallegos”。


那是一种可能的解释。您的意思是将“RíoGallegos”转换为“ Ri \xcc\x81 o Gallegos”,即UTF-8字节,代表分解后的i +组合重音。

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

解决方案是告诉grep使用UTF-8。这需要在grep任务的environment中设置LC_ALL变量。

要使用的快捷值是“ en_US.UTF-8”;一种更合适的方法是获取用户主preferred language的语言代码,如果要使用连字符,请在下划线处替换连字符,并在其末尾加上“ .UTF-8”。

10-05 23:59