2 new03 new03 于 2014.11.17 11:25 提问

Java项目跨服务中文乱码

最近在做一个项目,有一个功能是这样的:A服务中有个通讯录功能,可以对通讯录进行增删改查的操作。但通讯录是存在B服务中的数据库的。那么问题出现了,从A服务中增加一条中文的记录,到了B服务的数据库中就变成了乱码,然后在B服务的页面输出通讯录时,因为它没有做转码处理,所以显示是乱码。该怎么做能让A服务储存进去的中文在B服务的数据库中不是乱码呢?(PS:B服务数据库中的那个乱码字段是UTF-8编码,A服务存的时候该字段也是UTF-8编码的)谢谢。

4个回答

yuke198907
yuke198907   2014.11.18 08:45
已采纳

检查一下编码吧,两边要统一,不仅仅是数据库的编码,A服务传给B服务的时候也要固定编码

johnnyfan1989
johnnyfan1989   2014.11.18 10:29

请检查以下几处编码格式:

  1. A服务器和B服务器的linux默认环境编码,请在linux命令界面输入:locale
  2. 请看下数据源配置文件中的jdbc.url的编码格式
  3. 如果还是有乱码,在服务器A上输出log试下,然后一步一步定位是哪一步出现的乱码 总体来说,就是编码格式不一致问题
xiaochawan
xiaochawan   2014.11.18 11:50

页面、服务器、数据库的编码应该统一成UTF-8编码的。
1、html页面在header增加

2、java服务器,在web.xml中增加编码过滤器

encodingFilter
org.springframework.web.filter.CharacterEncodingFilter

encoding
UTF-8


forceEncoding
true


3、mysql数据库
创建表时
CREATE TABLE tablea (
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
jdbc链接:
jdbc:mysql://xxxx:3306/yyy?useUnicode=true&characterEncoding=UTF-8

xiaochawan
xiaochawan   2014.11.18 11:52

页面、服务器、数据库的编码应该统一成UTF-8编码的。
1、html页面在header增加

2、java服务器,在web.xml中增加编码过滤器


encodingFilter
org.springframework.web.filter.CharacterEncodingFilter

encoding
UTF-8


forceEncoding
true

3、mysql数据库
创建表时
CREATE TABLE tablea (
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
jdbc链接:
jdbc:mysql://xxxx:3306/yyy?useUnicode=true&characterEncoding=UTF-8

Csdn user default icon
上传中...
上传图片
插入图片