5

我编写了一个 Ruby 脚本,它正在读取一个File.read()包含 unicode 字符的文件 ( ),它在命令行中运行良好。

但是,当我尝试将其放入 Automator Workflow (Mac OS X) 时,我收到此错误;

2009-12-23 17:55:15 -0500: /Users/jeffreyaylesworth/bin/symbols:19:in `split': invalid byte sequence in US-ASCII (ArgumentError)
(traceback)

因此,当从 Automator 运行时,sp​​lit 突然不喜欢非 ASCII 字符。据我所知,两者都使用相同版本的 Ruby(版本号相同)。

我不太关心他们为什么表现不同(但如果有人知道,那就太好了),但我想要一个让 split 接受非 ASCII 字符的解决方案。

如果有帮助,我需要将单个字符的文本分成两部分,所以如果类似于 C 的标记器的东西可以工作,我可以使用它。

4

2 回答 2

7

您没有指定文件的编码。由于不可能可靠地自动确定文件的编码,因此必须明确指定编码。如果不是,则使用外部编码,如果未设置,将使用环境中指定的编码,如果环境未指定编码,则假定文件在 7位 US-ASCII。

在您的情况下,两种环境似乎存在差异(自动脚本通常在没有语言环境设置的非常严格的环境中运行)或解释器被调用的方式。

所以,你需要做类似的事情

File.read('/path/to/file', encoding: 'UTF-8')
于 2009-12-24T00:09:43.830 回答
1

听起来这两者是在不同的环境中运行的——具有不同的 LOCALE 值。

于 2009-12-23T23:47:33.007 回答