Java项目跨服务中文乱码:从A服务中增加一条中文的记录,到了B服务的数据库中就变成了乱码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java项目跨服务中文乱码:从A服务中增加一条中文的记录,到了B服务的数据库中就变成了乱码相关的知识,希望对你有一定的参考价值。

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

这个应该是你在A服务的中文就变成了乱码,这个需要你在A服务端就要将字体处理好,在前台使用UTF-8提交的中文必须使用URLDecoder.decode(str,“UTF-8”)进行转码再进行入库操作就不会有问题了追问

不是,我调试模式监视过,我A服务中往B服务存的时候是中文,不是乱码。

参考技术A JSP吗?你可以在传进数据库之前打印出,看看是否是乱码,统一用UTF8:
页面三句:<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" import="java.sql.*" errorPage="" %>
<%request.setCharacterEncoding("UTF-8");%>(页面传值)
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
数据库链接(mysql):private String uri="jdbc:mysql://localhost:3306/javaweb?useUnicode=true&characterEncoding=UTF-8";
数据库用的是什么?(Mysql):my.ini中mysql字段:default-character-set=utf8,mysqld字段character-set-server=gbk(这句是mysql有的,好像它不支持utf8显示中文);建立数据库和表的时候都指明编码为utf8
其他的数据库应该是类似的,编码问题有很多处,一旦一个地方的编码不同意都可能出现乱码

同一个java项目中添加数据为啥有的会出现乱码

项目编码都是使用的UTF-8,项目中其他的内容添加都正常,只有一个内容添加时会出现乱码,检查了页面,后台配置都是一样的

如果这个添加的参数是使用url传递的才会出现这种乱码现象,比如
location.href="/project/controller/controlle?name=\'\'+name+"&age="+age;
这种的话,这些参数在传递过程当中有可能会被改变编码方式。
如果是这种情况的话,建议使用encodeURL(name);转换一下编码方式。
如:var name=encodeURL(document.getElementById("name"));
参考技术A 你这描述的完全没办法帮助你啊。
排他法,如果两个页面完全一样的,你就在好的页面中进行修改,慢慢改成你要的页面,
一遍改一遍验证是否乱码。
最后的结果要么就是没有了乱码
要么就是改的过程中某一句导致了乱码
这个办法肯定能解决问题
参考技术B 如果用的是MySQL数据库 需要将表的编码设成utf-8 另外你的提交如果是用get 那就得改为post请求 就不会乱码了 参考技术C 是不是用了get请求导致的?

以上是关于Java项目跨服务中文乱码:从A服务中增加一条中文的记录,到了B服务的数据库中就变成了乱码的主要内容,如果未能解决你的问题,请参考以下文章

同一个java项目中添加数据为啥有的会出现乱码

java WEB,项目部署到服务器,IE浏览器页面中文有乱码

CDN简介

java 在本地输出的图片是正常的没有乱码,但是在linux服务器下面输出的图片是乱码

前端性能优化:雅虎14条优化规则

谈谈你对rest api的认识