解決:java.lang.ArrayIndexOutOfBoundsException: 160 at com.alibaba.fastjson.serializer.SerializeWriter.writeStringWithDoubleQuote(SerializeWriter.java:868)


今天線上遇到一個問題,從hbase里讀取出來的數據在轉換json后輸出時出現異常:

java.lang.ArrayIndexOutOfBoundsException: 160
        at com.alibaba.fastjson.serializer.SerializeWriter.writeStringWithDoubleQuote(SerializeWriter.java:868)
        at com.alibaba.fastjson.serializer.SerializeWriter.writeStringWithDoubleQuote(SerializeWriter.java:602)
        at com.alibaba.fastjson.serializer.SerializeWriter.writeString(SerializeWriter.java:1411)
        at com.alibaba.fastjson.serializer.StringCodec.write(StringCodec.java:49)
        at com.alibaba.fastjson.serializer.StringCodec.write(StringCodec.java:34)
        at com.alibaba.fastjson.serializer.MapSerializer.write(MapSerializer.java:188)
        at com.alibaba.fastjson.serializer.ListSerializer.write(ListSerializer.java:158)
        at com.alibaba.fastjson.serializer.MapSerializer.write(MapSerializer.java:188)
        at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:369)
        at com.alibaba.fastjson.JSON.toJSONString(JSON.java:596)
        at com.alibaba.fastjson.JSON.toString(JSON.java:590)
        at java.lang.String.valueOf(String.java:2854)
        at java.io.PrintStream.println(PrintStream.java:821)

從異常信息中可以看出是在json toString的時候出現了錯誤,可能是引號或者其它不可見字符導致的,查看實際數據並沒有出現單雙引號,但是出現了\t\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0,\t是不應該出現問題的,那問題就只可能是\u00A0 導致的,查看UNICODE對照表,發現\u00A0確實是一個不可見字符

(unicode 對照表:https://unicode-table.com/en/#control-character):

 

\u00A0轉ASCII,正好是160

 

問題變得簡單了,可能是fastjson 對不可見字符的支持問題,於是換了個最新版試一下,果然一切正常,問題是解決了,但是得找到具體原因,看了看源代碼,當前使用的這個

版本(1.1.39) 確實有部分特殊字符未做處理。

 可參考官方修正提交:https://github.com/alibaba/fastjson/commit/cdf7cb253e961666e2b3c2bdd423abe73ba4324a#diff-0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM