2009-12-23 83 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值。