我試圖解析一個UTF 16編碼的JSON文件,但是我遇到了一個奇怪的問題。InputStreamReader,FileInputStream開始解析文件在中點而不是開始
每當我使用FileInputStream
,解析文件似乎開始在中點。例如,如果文件長度爲40個字符,它將從字符20開始。這會導致解析JSON時出現錯誤,顯然它的數據從文件中的字符0開始。
儘管工作了幾個星期,但這一問題在前一天出現。我可以看到我的代碼沒有問題,因爲在問題開始前幾天沒有更改。
我嘗試過的一種解決方法是切換到使用FileReader
。它通常以字符0開始,但它不能處理文檔中的UTF-16字符,所以不能解決問題。
我正在使用Google的Gson庫來處理JSON,但是我認爲問題在InputStreamReader
或FileInputStream
之內。
下面是有爭議的代碼;
JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream(file), "UTF-16"));
reader.beginArray();
...
這是它引發的錯誤。上面的行reader.beginArray();
導致異常。
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 21
at com.google.gson.stream.JsonReader.expect(JsonReader.java:337)
at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:304)
at reader.ProofDatabase.load(ProofDatabase.java:130)
...
這裏是我的部分工作不處理UTF-16個字符串
JsonReader reader = new JsonReader(new FileReader(file));
reader.beginArray();
...
任何解決方案,無論是修復原來的問題,或的文件作爲UTF-16中讀另一種方法將會更受歡迎。
JSON文件是否以字節順序標記開頭?它是如何產生的? – Joni 2012-02-17 16:25:38
我目前使用的文件是手動創建的。就像我在有效的json中手動輸入一樣。前一個文件是使用gson庫中的'JsonWriter'類生成的。 – 2012-02-17 16:48:55
你使用了什麼編輯器? – Joni 2012-02-17 16:50:51