在我的程序中,我正在通过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”。