网上流传的这段代码根本就行不通。 String sql_ = “select * from user where name='刘三'”;
String sql_convert = new String(sql_.getBytes("utf-8"),"gb2312");
System.out.println( sql_convert );
String sql_convert = new String(sql_.getBytes("utf-8"),"gb2312");
System.out.println( sql_convert );
如果是Eclipse中文系统下默认是GBK
所以根本不用转就能识别中文
如果你硬要转
String sql_convert = new String(sql_.getBytes("GBK"),"gb2312");
你先嘚确定你的源代码的编码是什么再转啊 是utf8么?
用这个试试
这句话也不行的。
byte [] b;
String sql_convert = "select * from user where name='刘三'";
b = utf8_value.getBytes("8859_1");
String name = new String(b, "GB2312");
System.out.println(name);如果 sql_convert不是HTTP传过来的我就不知道你为什么要转了,直接打印出sql_convert不就行了
我怀疑是传入进去的SQL语句字符编码不正确引起的。
个人感觉不是这个原因,你debug一下,就知道了。
你现在表是GB2312编码存储,.....getBytes("ISO8859_1");试试
麻烦你自己再确认一次Window->Preferences->General->WorkSpace 里的 Text file encoding
和 Window->Preferences->General->Content Type->Text->Java Source File 的 Default encoding 都为UTF-8
你可以在Default encoding处输入UTF-8后update试试看,Good luck!
。。
在JAVA中。我无论设置成 GBK 或 UTF8 都不能查询 SELECT * FROM user WHERE name='刘华' 在Postgres数据库。
原因可能出在于 JDBC连接PostgreSQL中。跟转换字符串无关。
上面的代码是得到一个字节数组,数组里面的内容,是,两个UTF-8编码的汉字。byte [] gb2312 = "汉字".getBytes("GB2312");
上面的代码是得到一个字节数组,数组里面的内容,是,两个GB2312编码的汉字。两个数组的大小应该不相同。向Java平台的转换,我们知道,Java实用的是Unicode编码。String utf8String = new String(utf8,"UTF-8");
String gb2312String = new String(gb2312,"GB2312");
上面的代码是把不同编码的内容,向Java平台转换,转换后,可以被Java平台识别。可以让Java平台的编码做中介,完成转换byte [] result = new String(utf8,"UTF-8").getBytes("GB2312");这个结果应该和gb2312是一样的。
这里已经是unicode编码,你把他转为UTF8编码,然后再转成GB2312编码,能不乱码吗?
而且为什么要转码?好奇怪!
其实我也觉的奇怪。因为这条语句在数据库工具中能查出数据的。但是写在JAVA中就查不出数据。
我怀疑是传入进入的SQL语句编码不对,因为JAVA默认是utf8,所以转成gb2312试看。
CharsetDecoder
CharsetEncoder
JAVA里的SQL语句还需要转一次再查询吗?