我的Windows机器上有一个相当大的JSON文件,它包含像\xE9
这样的东西。当我JSON.parse
它,它工作正常。使用JSON.parse意外的编码错误
然而,当我的代码推到运行CentOS的我的服务器,我总是得到这样的:"\xE9" on US-ASCII (Encoding::InvalidByteSequenceError)
这里是file
在两台机器上输出
的Windows:
λ file data.json
data.json: UTF-8 Unicode English text, with very long lines, with no line terminators
的CentOS :
$ file data.json
data.json: UTF-8 Unicode English text, with very long lines, with no line terminators
这里我s我试图解析时得到的错误:
$ ruby -rjson -e 'JSON.parse(File.read("data.json"))'
/usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/json/common.rb:155:in `encode': "\xC3" on US-ASCII (Encoding::InvalidByteSequenceError)
什么可能导致此问题?我尝试过使用iconv将文件转换为每种可能的编码,但似乎没有任何效果。
事情是,我自己有问题的文件;是否有可能直接用文件的编码来解决这个问题,还是我必须从Ruby中完成?在阅读你的答案后,我尝试将文件转换为ISO-8859-1,但它仍然无法识别它。 – itdoesntwork
该文件已经是ISO-8859-1。您可以将它读入Ruby,将编码转换为UTF-8(如第一个“File.read”示例中所示),然后将其写回。这会给你带来一个UTF-8编码文件。 –