我的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編碼文件。 –