关于java:getBytes引发的编码错误

2次阅读

共计 633 个字符,预计需要花费 2 分钟才能阅读完成。

在应用 restTemplate 作申请的时候,外部退出了一个 interceptor 来解决应答体的解码工作,返回了 new ByteArrayInputStream(repsonse.getBytes()) 把 json 解析为对象,在 ide 里代码运行时没有什么问题,后续打包后用 bat 脚本在 win10 上运行,却报 JSON parse error:Invalid UTF-8 start byte 谬误。

猜想是 windows 上运行未采纳 utf-8, 查看 getBytes() 源码,无参结构时会应用 defaultCharset() 去优先查找应用文件的编码方式,未找到才应用 utf- 8 编码。所以在应用 bat 脚本运行时 getBytes() 没有采纳 utf- 8 编码。

 public static Charset defaultCharset() {if (defaultCharset == null) {synchronized (Charset.class) {
                String csn = AccessController.doPrivileged(new GetPropertyAction("file.encoding"));
                Charset cs = lookup(csn);
                if (cs != null)
                    defaultCharset = cs;
                else
                    defaultCharset = forName("UTF-8");
            }
        }
        return defaultCharset;
    }

应用 getBytes(StandardCharsets.UTF-8) 解决问题。

正文完
 0