共计 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) 解决问题。
正文完