问题说明 : 在银河麒麟服务器操作系统使用 TongWeb 做为应用服务器 , 使用达梦数据库做数据库服务器部署应用时 , 出现了前台提交的中文数据在后台获取到的是乱码的情况导致客户端验证异常 , 经过排查客户端数据提交时候中文并未乱码 , 确实是在后台获取到时才乱码的。
处理思路 : 一个项目出现后台获取到中文乱码的情况 , 一般是由于编码不统一或者是使用的编码是不支持中文的 , 如果发生后台数据接受的数据是乱码则要考虑的几个方面 :
1. 客户端页面编码 ,
2、提交的时候的数据是否有出现乱码 ,
3、后台接收时候设置的是编码 ,
4、使用的应用服务器上的编码设置 ,
5、服务器的编码设置。
这几个地方的编码设置应该是一致的比如都设置成 utf- 8 并且是支持中文的 utf8 编码。
本次经过确认客户端提交的数据没有出现乱码 , 所以要考虑后台的情况。
我们先查看了银河麒麟服务器操作系统上的情况 :
通过 locale 命令查看时发现 : 使用的是 en_US.UTF-8 这种情况下 对于中文的支持肯定是会有问题的
这里有个坑要稍微注意一下 : 往常我们修改 linux 服务器 locale 是修改的 /etc/sysconfig/i18n 这个文件 , 网上大多数资料说如果没有这个文件是新建一个 , 然后 source /etc/sysconfig/i18n 使其立即生效 , 然后再查询 locale 时 发现 改过来啦 :
但是你 reboot 服务器之后会发现 : 我是设置了个寂寞么 ?! 重启之后 /etc/sysconfig/i18n 的设置失效了 ! 所以 这里这种设置方式是没有用的 !
对此 , 我们需要寻找另外的方式 , 根据麒麟官方说法 : 装系统的时候默认装了中文安装包了就直接改配置就行 , 没安装中文安装包 , 需要先安装 , 才有效。至于如何确认可以通过 locale - a 命令或者是 locale -a |grep zh_CN
查询到这样的内容就表示原本是支持中文的 , 这样我们直接修改 /etc/locale.conf 即可
修改完 /etc/locale.conf 重启服务器即可。
这里我使用的是华为的云服务器时是使用的提供的镜像 , 所以我不太知道原本是否是安装了中文语言包的 , 并且我在修改
/etc/sysconfig/i18n 之前是使用了 yum install :
所以我不确定原来是否有 zh_CN 的相关支持 , 大家不妨做个验证。
后来会发现即使正确的设置了服务器本身的支持语言编码之后 , 还是乱码。后来想起 : 还有个 TongWeb 应用服务器没有设置呢 !
经过确认发现 :TongWeb 本身的默认编码是 GBK, 所以必然会出现问题啊 !
设置方法如下 :
点击 TongWeb 管理控制台菜单时的【WEB 容器设置】–【容器配置】在容器配置页面设置 :【默认请求参数解码字符集】以及【默认应答编码字符集】为 UTF-8。
除此之外 , 在 HTTP 项目还需要设置【WEB 容器配置】下的【HTTP 通道管理】
一般情况下项目部署好之后是采用的默认 8088 的端口 , 因此我们去配置 8088 这个 HTTP 通道 :
将对应 HTTP 通道的【其他设置】的【URL 编码格式】设置为 UTF-8。避免含中文的 URL 出现乱码。
设置 TongWeb 的编码之后 , 重启启动 TongWeb , 银河麒麟服务器操作系统 TongWeb 在安装时默认目录为 :/opt/TongWeb/ 转到 bin 目录下 , 先./stopserver.sh 停止应用服务器 然后再./startservernohup.sh 以后台方式启动服务器避免前台启动时出现的 ssh 断开之后服务器就断开的情况。
然后发现 提交的中文数据 后台获取不再是乱码啦 !!!
原文链接:https://blog.csdn.net/yeyuningzi/article/details/118354628