cocoa - NSTask字符串编码问题

标签 cocoa encoding nstask

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

问题是我可能会 grep 像“Río Gallegos”这样的术语。遗憾的是(正如我用 fileSystemRepresentation 检查的那样),它经过了转换,结果是“Rião Gallegos”。

我该如何解决这个问题?

-- 瑞

最佳答案

The problem is that I might grep terms like "Río Gallegos". Sadly (as I checked with fileSystemRepresentation), that undergoes the conversion and turns out to be "RiÃÅo Gallegos".

这是一种可能的解释。您的意思是“Río Gallegos”被转换为“Ri\xcc\x81o Gallegos”——UTF-8 字节表示分解的 i + 组合锐音符号。

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

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

要使用的快速而肮脏的值是“en_US.UTF-8”;更合适的方法是获取用户主要的语言代码 preferred language ,将连字符(如果有)替换为下划线,并在其末尾粘贴“.UTF-8”。

关于cocoa - NSTask字符串编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2533944/

相关文章:

c# - 更改 C# 中的编码?

swift - NSTask/bin/echo :/bin/echo: cannot execute binary file

cocoa - 通过 NSTask 执行时 tops 命令给出错误

objective-c - 使用点语法的编译器错误 "setter method needed"-- setter 已定义

objective-c - 如何将所有属性内容从 NSTextView 复制到 NSPasteboard

objective-c - 是否有任何好的开源 Mac 应用程序模板

objective-c - NSPipe 输入来 self 无法控制的进程

swift - 打开和保存在非常简单的基于文档的 Swift 4 应用程序中不起作用

python - 如何在 python 中正确编码可能是中文的编码?

encoding - 使用utl_file包通过oracle存储过程发送file.txt中的数据