2

解决Tomcat环境中Jsoniter反序列化中文字符乱码的问题

 2 years ago
source link: http://ocdman.github.io/2020/05/30/%E8%A7%A3%E5%86%B3Tomcat%E7%8E%AF%E5%A2%83%E4%B8%ADJsoniter%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E4%B8%AD%E6%96%87%E5%AD%97%E7%AC%A6%E4%B9%B1%E7%A0%81%E7%9A%84%E9%97%AE%E9%A2%98/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

最近项目中使用到了Jsoniter(全称JSON-Iterator),据说序列化对象以及反序列化Json字符串的速度超快。

但是我发现当在Tomcat环境中,使用Jsoniter反序列化前端发送的Json中文字符串时,结果会出现乱码。主要原因是因为后台默认字符串的格式不是UTF-8类型,具体格式因操作系统而异。

ajax中设置contentType: “charset=UTF-8”

我最先尝试的就是这种方法,假设前端指定上传的字符串编码格式为UTF-8,那么后端接受的字符串编码也应该为UTF-8。然后,以我的电脑为例,后端的字符串编码格式仍然是GBK。

POST方法中设置request.setCharacterEncoding(“UTF-8”)

因为我使用的是POST方法接受请求,网上还有种说法,设置request请求的字符编码为UTF-8。然后,我尝试了也没有用。

设置JVM的启动参数-Dfile.encoding=utf-8

这是我尝试过的方案中唯一可行的。因为JVM的编码格式取决于操作系统的默认编码格式,而我的操作系统环境是中文,默认编码格式为GBK。Tomcat所使用的VM,默认编码格式也是GBK。所以,当前后端两种编码格式不一致的情况下时,就会出现乱码的情况。

虽然,这么做Jsoniter序列化的问题解决了,但是控制台输出的文字却又变成了乱码。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK