我在运行Ruby脚本时遇到ParserError,该脚本从JSON文件生成翻译的HTML文件。 JSON文件的编码是ISO-8859-1,但是当我运行ruby代码时,我得到以下内容:
:marker=>true}
C:/Ruby200/lib/ruby/2.0.0/json/common.rb:155:in `parse': 757: unexpected token a
t '{ (JSON::ParserError)
"de_DE": {
"1": "HERBST 2013",
"2": "STILSICHER",
"3": "Klassisch geschnittene Anzüge",
"4": "PERFEKT KOMBINIERT",
"5": "Business hemden mit klasse",
"6": "HERBST 2013",
"7": "CASUAL BIS COCKTAIL",
"8": "Vielseitige Kleider",
"9": "SPORTIV BIS ELEGANT",
"10": "Mäntel mit Anspruch",
"11": "ELEGANZ NACH MASS",
"12": "Unverwechselbare",
"13": "PASSGENAU",
"14": "Perfekt geschnittene Blazer"
},
"en_GB": {
"1": "FALL 2013",
"2": "PURE STYLE",
...............
它出于某种原因改变了外国字符吗?
在ruby脚本中我有:
translation_hash = JSON.parse(File.read('translation_master.json').force_encoding("ISO-8859-1").encode("utf-8", replace: nil))
http://rubyfiddle.com/riddles/d17fd
json文件在这里:
答案 0 :(得分:2)
您是否将文件读为UTF8?除非另有说明,否则Ruby 1.9将假定文件为UTF-8。
JSON.parse open("input.json", "r:iso-8859-1:utf-8").read
这将指定该文件包含ISO-8859-1编码,然后在读取时将其转码为UTF-8。
如果您可以提供测试文件,则可能更容易帮助调试。
答案 1 :(得分:2)
首先,这个人jadala是我在这里所说的作者。
一些背景
Latin1是MySQL使用的字符编码。人们错误地认为它等同于ISO-8859-1,但事实并非如此,它实际上是CP-1252(也称为Windows-1252)。 CP-1252是ISO-8859-1的超集,带有一些附加字符(最近包括€符号)。
尝试应用此功能:
def fix_cp1252_utf8(text)
text.encode('cp1252',
:fallback => {
"\u0081" => "\x81".force_encoding("cp1252"),
"\u008D" => "\x8D".force_encoding("cp1252"),
"\u008F" => "\x8F".force_encoding("cp1252"),
"\u0090" => "\x90".force_encoding("cp1252"),
"\u009D" => "\x9D".force_encoding("cp1252")
})
.force_encoding("utf-8")
end
看看这里: