我正在尝试使用JavaScriptCore从终端进行一些字符串操作,但我无法解决某种字符编码问题。
如果我在终端中运行:
/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc -e "print('héllo world')"
显然应该打印héllo world
,而是打印héllo world
。如果我在jsc交互模式中运行print语句,会发生相同的结果。
我知道乱码文本是一个不正确的字符编码翻译问题。问题是,我无法弄清楚如何告诉jsc使用特定的编码。我已尝试为我的shell更改$ LANG,但这没有效果。
编码问题发生在哪里?如何解决?
答案 0 :(得分:1)
似乎JavascriptCode不支持UTF8输入文件(这是Terminal在这里提供的)。
有趣的是,node.js
会正确处理您的示例。
在您的简单情况下,可以使用稍微扩展的8位字符集CP1252。即,如果您将上述打印命令放在文件a.txt
中并使用iconv
进行转换:
iconv -f utf-8 -t CP1252 a.txt >aa.txt
您现在可以运行jsc aa.txt
并获得所需的输出(héllo world
)。
另一个(不方便)选项是直接在字符串中使用Unicode代码点。即,你的例子看起来像这样:
print('h\u00E9llo world');