2009-12-23 39 views
5

我写过一个Ruby脚本,它正在读取一个包含unicode字符的文件(File.read()),并且它可以在命令行中正常工作。但是,当我尝试将其放入Automator工作流程(Mac OS X)时,出现此错误;Ruby 1.9中的Unicode字符串

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

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

我不太在意为什么他们的表现不同(但如果有人知道,那很好),但我想要一个解决方案来使分裂接受非ASCII字符。

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

回答

7

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

就你而言,似乎在两种环境(自动脚本通常运行在没有本地设置的非常严格的环境中)或解释器被调用的方式上有所不同。

所以,你需要做的是这样

File.read('/path/to/file', encoding: 'UTF-8') 
+0

这工作,谢谢! – 2009-12-24 00:25:19

1

听起来像两个正在运行从不同的环境 - 具有不同的LOCALE值。