UTF-8编码,部分中文正常,部分为乱码的问题?

时间:2023-01-05 13:24:45
代码如下:

try
{
    PreparedStatement preStmt = con.prepareStatement("insert into t_bb(f_no,f_name) values(?,?)");
    preStmt.setString(1,"ABCDEFG");
    preStmt.setString(2,"中国从前有个传说");
    preStmt.executeUpdate();
}
catch(SQLException e)
{
    System.out.println(new String(e.toString().getBytes("iso-8859-1"),"utf-8"));
}

执行插入数据失败后,提示如下:
Duplicate entry 'ABCDEFG-中�?��?�??�??个传说' for key 'PRIMARY'
部分中文能正常显示,而部分为乱码,这是怎么回事?

21 个解决方案

#1


你不转码试试呢

#2


我也遇到了,而且有时乱码有时不乱码

#3


数据库与后天代码,客户端要一直的!

#4


不转码的话全是乱码。
数据库,与代码的编码肯定都一致的。
有部分中文能正常显示,编码上应该是对的,问题是有一部分是乱码?真是无处下手。

#5


试试GB2312

#6


GBK

#7


既然是从数据库查出来的数据 必定原因出在数据库编码上

#8


不是从数据查出来的数据,是插入失败后捕获的异常
GBK与GB2312没试过,如果就把程序文本的编码方式改一下,再加上代码改一下:System.out.println(new String(e.toString().getBytes("iso-8859-1"),"GBK"));
的话,这倒是顺便试过,全是乱码。

#9


用过滤器过滤一下……

#10


Duplicate entry 'ABCDEFG-中�?��?�??�??个传说' for key 'PRIMARY'
1、你的主键重复了。
2、你看一下数据库的编码是什么,一般不转换就可以的。
System.out.println(new String(e.toString().getBytes("iso-8859-1"),"utf-8"));
你改为
System.out.println(new String(e.getBytes("iso-8859-1"),"utf-8"));
我感觉你不用转换编码,如果你项目用的就是utf8的话,你就不用转换。还有就是数据库用的是什么编码。

#11


数据库编码 和你java的编码格式不一致,看起来像是 GBK--》UTF8 你的java 是gbk 数据库是UTF8

#12


1、这个异常是我故意让它抛出的
2、统一为utf-8编码,如果我正常插入的话,一切都正常。另外那个e.toString()出来的结果是一样的。

#13


Duplicate entry 'ABCDEFG-中�?��?�??�??个传说' for key 'PRIMARY' 
异常问题是你数据库的原因;

乱码方面,有可能与你的电脑或者你的编程工具本身的编码问题,导致现实有问题!

#14


谢谢大家的回答。我要问的是为什么部分中文正常,部中文乱码的问题,异常是我故意让主键重复产生的异常的。按理说编码错的话,那么所有中文显示都会不正常,怎么会是个别字正常?

#15


你用的什么数据库,在数据库中显示正常么

#16


编码与好多东西有关,比如:一般windows不会有系统编码的问题,但如果是linux/unix的话很可能有关系。第二就是eclipse中项目使用的编码是什么,右击你的项目-->properties-->resource-->text File encoding

#17


该回复于2012-04-19 09:35:31被版主删除

#18


最新进展:
1、无论用什么编码:GBK、GB2312、UTF-8 ,数据库的中文都是正常的,就是Java这边的编码与数据库对不上也会是正常的。这可能是mySQL驱动自己做了什么转换。
2、统一都用GBK、GB2312的啊,则没有上述问题,即抛的异常能正常显示中文
3、统一都用UTF-8就有上述问题,就是问题还没解决。

#19


自已顶一次,希望有人能解答

#20


少见。

#21


该回复于2012-05-02 09:05:02被版主删除

#1


你不转码试试呢

#2


我也遇到了,而且有时乱码有时不乱码

#3


数据库与后天代码,客户端要一直的!

#4


不转码的话全是乱码。
数据库,与代码的编码肯定都一致的。
有部分中文能正常显示,编码上应该是对的,问题是有一部分是乱码?真是无处下手。

#5


试试GB2312

#6


GBK

#7


既然是从数据库查出来的数据 必定原因出在数据库编码上

#8


不是从数据查出来的数据,是插入失败后捕获的异常
GBK与GB2312没试过,如果就把程序文本的编码方式改一下,再加上代码改一下:System.out.println(new String(e.toString().getBytes("iso-8859-1"),"GBK"));
的话,这倒是顺便试过,全是乱码。

#9


用过滤器过滤一下……

#10


Duplicate entry 'ABCDEFG-中�?��?�??�??个传说' for key 'PRIMARY'
1、你的主键重复了。
2、你看一下数据库的编码是什么,一般不转换就可以的。
System.out.println(new String(e.toString().getBytes("iso-8859-1"),"utf-8"));
你改为
System.out.println(new String(e.getBytes("iso-8859-1"),"utf-8"));
我感觉你不用转换编码,如果你项目用的就是utf8的话,你就不用转换。还有就是数据库用的是什么编码。

#11


数据库编码 和你java的编码格式不一致,看起来像是 GBK--》UTF8 你的java 是gbk 数据库是UTF8

#12


1、这个异常是我故意让它抛出的
2、统一为utf-8编码,如果我正常插入的话,一切都正常。另外那个e.toString()出来的结果是一样的。

#13


Duplicate entry 'ABCDEFG-中�?��?�??�??个传说' for key 'PRIMARY' 
异常问题是你数据库的原因;

乱码方面,有可能与你的电脑或者你的编程工具本身的编码问题,导致现实有问题!

#14


谢谢大家的回答。我要问的是为什么部分中文正常,部中文乱码的问题,异常是我故意让主键重复产生的异常的。按理说编码错的话,那么所有中文显示都会不正常,怎么会是个别字正常?

#15


你用的什么数据库,在数据库中显示正常么

#16


编码与好多东西有关,比如:一般windows不会有系统编码的问题,但如果是linux/unix的话很可能有关系。第二就是eclipse中项目使用的编码是什么,右击你的项目-->properties-->resource-->text File encoding

#17


该回复于2012-04-19 09:35:31被版主删除

#18


最新进展:
1、无论用什么编码:GBK、GB2312、UTF-8 ,数据库的中文都是正常的,就是Java这边的编码与数据库对不上也会是正常的。这可能是mySQL驱动自己做了什么转换。
2、统一都用GBK、GB2312的啊,则没有上述问题,即抛的异常能正常显示中文
3、统一都用UTF-8就有上述问题,就是问题还没解决。

#19


自已顶一次,希望有人能解答

#20


少见。

#21


该回复于2012-05-02 09:05:02被版主删除