1.问题描述
本次应用是Java打包的Jar服务,通过nssm.exe安装到windows服务器的服务。总共负载三台,该服务是发送消息给第三方,第三方反馈部分消息中文乱码,部分正常。
2.问题处理
中文乱码一定是字符集不同导致的乱码,第三方反馈部分乱码,而且第三方的服务器是同一台同一个应用,那么就能排除是第三方问题导致的,大概率是我方三台服务器的字符集问题导致。
通过排查window服务器字符集,在cmd窗口输入chcp,发现三台都是GBK,

那么,按照逻辑,服务器的字符集没问题,那就是应用层面的问题了。应用层面又包括Java的Jvm和应用本身的字符集设置。
经查,发现三台中有一台的JVM字符集设置了UTF-8:
查看方式:cmd窗口中输入java -XX:+PrintFlagsFinal -version | findstr "file.encoding HeapSize"
有设置的服务器输出结果:

没设置的服务器输出结果:

问题找到了,那解决起来就简单了,可以继续设置JVM的参数,也可以直接设置应用启动的字符集参数。我这次通过设置应用的启动参数。
首先要删除原来的服务,其次更改启动参数,最后重新安装服务,启动服务。
1.删除服务:sc delete 服务名
2.新增字符集参数:

3.重建服务,语法:管理员打开cmd,命令:路径\nssm.exe install 服务名 路径\名称.bat

重启服务后,问题解决
3.问题总结
中文乱码终究是字符集问题导致的。工作中常见的中文乱码,包括应用程序出现的中文乱码、数据库数据的中文乱码。
常见的字符集

数据库乱码,主要是核对oracle客户端的字符集(取自系统环境变量)与数据库的字符集是否一致,下次遇到问题再做详细记录
5783

被折叠的 条评论
为什么被折叠?



