zoukankan      html  css  js  c++  java
  • 解决: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的时候出现了错误,可能是引号或者其它不可见字符导致的,查看实际数据并没有出现单双引号,但是出现了 u00A0u00A0u00A0u00A0u00A0u00A0, 是不应该出现问题的,那问题就只可能是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

  • 相关阅读:
    Centos 7.9 部署可道云
    shell简单检查URL
    TIME_WAIT和CLOSE_WAIT状态过多的分析与解决
    win10 关闭自动更新
    Python3 按backspace问题 ^H
    CentOS7设置笔记本合盖不休眠
    centos7 /boot/分区处理
    if __name__ == '__main__'
    在Linux中了解TCP包装器(/etc/hosts.allow&/etc/hosts.deny)
    华为路由器端口映射
  • 原文地址:https://www.cnblogs.com/jessezeng/p/6758569.html
Copyright © 2011-2022 走看看