在jdk7和jdk8中都存在这个问题如下:try {
String str = "上海上海";
String gb2312 = new String(str.getBytes("utf-8"), "gb2312");
String utf8 = new String(gb2312.getBytes("gb2312"), "utf-8");
System.out.println(str.equals(utf8));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}打印出来是false,就是说转码不正确,请教大神们应该怎样转码?
String str = "上海上海";
String gb2312 = new String(str.getBytes("utf-8"), "gb2312");
String utf8 = new String(gb2312.getBytes("gb2312"), "utf-8");
System.out.println(str.equals(utf8));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}打印出来是false,就是说转码不正确,请教大神们应该怎样转码?
解决方案 »
- Comparator接口的compare方法怎么实现排序的????
- 求答案 在线等 谢谢大侠们
- 一数组有10亿个元素,取最大的1万条,有什么好算法。
- 关于JAVA一些命名规则,大家补充一下。。。。。
- 是关于GUI的一个问题,可以编译,不能运行。请帮忙
- byte[]类型转换为String型后再转换回byte[],为什么不同?在线等,解决立刻给分
- 计算文件数目。。。
- 简单的问T,字符串替换!快来抢分!
- 我现在编译了一个CLASS文件?????
- 为啥我写的串口监听器不能用呢?
- 新人求指导:我有这样一个需求,我现在是客户端,已经给服务端发了数据,服务端给我返回数据,但是服务端给我返回数据的时候,可能出现网络中断的情况,这样,我拿到的数据
- java中关于数组的问题
byte[] b = s.getBytes("gb2312");//编码
String sa = new String(b, "gb2312");//解码:用什么字符集编码就用什么字符集解码
b = sa.getBytes("utf-8");//编码
String sa2 = new String(b, "utf-8");//解码
System.err.println(sa.equals(sa2));
String str = "上海上海";
String gb2312 = new String(str.getBytes("utf-8"), "gb2312"); ---此时你已经变成了了一个全新的String,你这样就再难以转换回来
public static void main(String[] args) {
try {
String str = "上海上海";
byte[] bs = str.getBytes("utf-8");//utf-8,一个汉字3个字节
for (byte b : bs) {
System.out.print(Integer.toBinaryString(b&0xff) + " ");
}
System.out.println();
byte[] bs1 = str.getBytes("gb2312");//gb2312,一个汉字2个字节
for (byte b : bs1) {
System.out.print(Integer.toBinaryString(b&0xff) + " ");
}
System.out.println();
String gb2312 = new String(str.getBytes("utf-8"), "gb2312");
/*
* str.getBytes("utf-8")是字符序列化,以utf-8的编码方式序列化
* new String(str.getBytes("utf-8"), "gb2312")是字符反序列化,把得到的字节数组,以gb2312的编码方式反序列化
* 你这得到的是乱码
* 字符串以什么样的方式序列化就要以同样的方式反序列化
*/
System.out.println(gb2312);
String utf8 = new String(gb2312.getBytes("gb2312"), "utf-8");
System.out.println(str.equals(utf8));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
再补充下,转的话需要用unicode作为中转,
new String(str.getBytes(),"gb2312")
这样就不会乱码
String sa = new String(b, "gb2312");//解码:用什么字符集编码就用什么字符集解码
b = sa.getBytes("utf-8");//编码 ????