Ruby 1.9中的Unicode字符串

5

我写了一个Ruby脚本,它正在读取一个包含Unicode字符的文件(File.read()),并且从命令行中可以正常运行。

然而,当我尝试将其放入Automator工作流程(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 运行时,split 突然不喜欢非 ASCII 字符。据我所知,两者都是从相同版本的 Ruby 运行(版本号相同)。

我并不太关心它们为什么表现不同(但如果有人知道,那就太好了),但我希望有一个解决方案来使 split 接受非 ASCII 字符。

如果有帮助的话,我需要将文本在单个字符处分割成两部分,所以如果有类似于 C 的 tokenizer 的东西,我可以使用它。

2个回答

7
您没有指定文件的编码。由于无法可靠地自动确定文件的编码,因此必须明确指定编码。如果没有指定,则使用外部编码,如果未设置,则将使用环境中指定的编码,如果环境未指定编码,则假定文件采用7位US-ASCII编码。
在您的情况下,似乎存在两个环境之间的差异(自动化脚本通常在没有语言环境设置的非常受限制的环境中运行),或者解释器调用方式不同。
因此,您需要执行类似以下的操作:
File.read('/path/to/file', encoding: 'UTF-8')

1

看起来这两个程序是在不同的环境中运行的,具有不同的 LOCALE 值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接