2014-11-24 32 views
0

我有一英鎊兌英鎊上簽字YAML文件 -以最簡單的方式使英鎊英鎊的紅寶石從YAML文件

amount: "£50" 

,當我訪問符號它返回以下內容:

"£50" 

我使用HASHIE:混搭加載和訪問我的YAML ......想法,歡迎,都沒有發現任何東西,讓一個簡單的解決辦法(或至少一個爲我的作品)

腹板
+0

看你是否能找到答案[這裏](http://stackoverflow.com/questions/1158072/ruby-to-yaml-utf8-string) – 2014-11-24 19:12:55

+0

凡它是否將該值*返回給*?它看起來像你試圖輸出一個UTF-8字符作爲US-ASCII;默認情況下,Ruby字符串是UTF-8。什麼是Encoding.default_internal和Encoding.default_external設置爲? – 2014-11-24 19:13:16

+0

看看你是否可以找到你的答案[here](http://stackoverflow.com/questions/1158072/ruby-to-yaml-utf8-string) – 2014-11-24 19:13:26

回答

1

外部e編碼是你的問題; Ruby假定從外部文件讀取的任何數據都是CP-850,而不是UTF-8。

可以解決這幾個方面:

  1. Encoding.default_external ='utf-8'。這會告訴Ruby默認讀取文件爲UTF-8。
  2. 明確閱讀您的文件爲UTF-8,通過open('file.yml', 'r:utf-8')
  3. 將您的字符串轉換爲UTF-8,你把它傳遞給你的YAML解析器之前:

您可以通過String#force_encoding做到這一點,它告訴Ruby來重新詮釋的原始字節有不同的編碼:

text = open("file.yml").read 
text.force_encoding("utf-8") 
YAML.load text 
+0

Encoding.default_external ='utf- 8'做到了!太多了!這是奇怪的壽爲什麼,我使用完全相同的版本的寶石/紅寶石,但Ubuntu不會發生,但移動到窗戶,我必須明確指出上面的行......無論如何,它看起來不錯!再次感謝!! – Bodao 2014-11-25 10:52:40