Qt56 App提交中文字符串到Spring MVC App乱码

来源:互联网 发布:电气设计软件 编辑:程序博客网 时间:2024/06/06 10:57
Title: Qt56 App提交中文字符串到Spring MVC App乱码
Date:2016-5-17
Author:kagula


问题
Qt5中的中文字符串传到Spring3 Web App乱码。


测试环境
[1]Win7SP1, Qt Creator 3.1.6, Qt56 with Mingw32
[2]Spring MVC 3.1.2


测试字符串是“测试
GBK编码是(b2 e2) (ca d4)
UTF-8编码是(e6 b5 8b)(e8 af 95)
Unicode编码是(6d 4b) (8b d5)

在Qt Creator , Qt5中
std::string的每个元素是单字节,utf-8编码。
QString的每个元素同Java String是双字节,unicode编码。
传到Java前,我把字符串用QString::fromStdString函数中QString unicode转为std::string utf-8然后
递交给Web服务器。

Java中
传上来的字符串变为双字节为单位,高位自动填0,导致中文处理乱码

解决办法
在web.xml中加入过滤器
<filter>          <filter-name>characterEncodingFilter</filter-name>          <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>          <init-param>              <param-name>encoding</param-name>              <param-value>UTF-8</param-value>          </init-param>          <init-param>              <param-name>forceEncoding</param-name>              <param-value>true</param-value>          </init-param>      </filter>      <filter-mapping>          <filter-name>characterEncodingFilter</filter-name>          <url-pattern>/*</url-pattern>      </filter-mapping>

问题解决。


补充资料
Q Win7设置Oracle为UTF-8
第一步:为系统添加环境变量
NLS_LANG
AMERICAN_AMERICA.UTF8
最后一步:查看数据库中测试到的用户环境
在Oracle中用下面的SQL语句可以看到数据库是UTF-8编码
select userenv('language') from dual;
结果
AMERICAN_AMERICA.AL32UTF8
0 0
原创粉丝点击