今天在写程序时遇到了一个乱码问题,困扰了好久,事情是这样的,

在Mapper层编写了查询语句,然后服务处调用,结果控制器返回一堆乱码

java导出中文乱码 java导入汉字乱码_数据库


然后查看数据源头处:

java导出中文乱码 java导入汉字乱码_数据库_02


由重新更改解码的字符集,在数据库中是正常显示的中文字符

java导出中文乱码 java导入汉字乱码_另存为_03


数据库的编码集也是utf8

java导出中文乱码 java导入汉字乱码_另存为_04


idea中相应的解码都是utf8

java导出中文乱码 java导入汉字乱码_数据库_05


那为什么还会出现乱码呢?

出现这种状况的都是从外部导入文件的,可能不同文件的编码解码字符集不一样。如下图

java导出中文乱码 java导入汉字乱码_mysql_06

上面txt文件可以看到右下角为utf-8编码,但是用excel打开就乱码了

java导出中文乱码 java导入汉字乱码_编码方式_07


或者相反的情况,这里要注意的是乱码后不可以随便在保存,然会会都是字符集,导致两边都乱码,具体的解决方案是在能打开一方文中文是打开后另存为utf-8编码。如下:

  • 用Excel打开为中文时

java导出中文乱码 java导入汉字乱码_java导出中文乱码_08


选择Web选项,更改编码为UTF-8

java导出中文乱码 java导入汉字乱码_java导出中文乱码_09


此时中文就会解码为utf-8,在用其他软件打开时选择用utf-8编码即可。

  • 记事本打开为中文

java导出中文乱码 java导入汉字乱码_编码方式_10


另存为时将编码改为utf-8即可。

注意在一方打开为乱码时一定不要另存为除非你知道起编码方式。

经过上面步骤后已经确定编码的方式了,如果时记事本保存的excel打开一般会乱码不用管,打开数据库管理工具

java导出中文乱码 java导入汉字乱码_数据库_11

导入csv或txt都可以,之后编码方式选为utf-8即可。

java导出中文乱码 java导入汉字乱码_java导出中文乱码_12