String name = "中国"; 2.String afterE=new String(name.getBytes("utf-8"),"utf-8"); 3.String then = new String(afterE.getBytes("gbk"),"gbk"); 4.System.out.println(then); 这样是对的,因为utf-8中char是2个字节,gbk中char是1个字节.
String name = "中国";此时的“中国”在内存里面是用unicode编码的字符。 new String(name.getBytes(),"utf-8"); name.getBytes():把unicode编码的字符用gbk方式转化成字节数组,很显然,转化是行不通的! 然后,又把转化错了的字节数组用utf-8转化成字符,输入就错了,输出肯定不对!
在java中,汉字是以Unicode码存在的, String name = "中国"; String afterE = new String(name.getBytes("utf-8"),"gbk"); System.out.println(afterE); String then = new String(afterE.getBytes("gbk"),"utf-8"); System.out.println(then);
then = new String(afterE.getBytes("utf-8"),"gbk"); 你获得的是utf-8编码的字节,却传进gbk当然会不对了,编码他会根据你给的字节在编码表里面查找相应的字符,找不到或找错就是乱码或者奇怪文字 new String(byte[],Srting) 是将字节数组的字节转化为String(Unicode编码的),你要告诉他你给的是什么编码的字节数组
2.String afterE=new String(name.getBytes("utf-8"),"utf-8");
3.String then = new String(afterE.getBytes("gbk"),"gbk");
4.System.out.println(then);
这样是对的,因为utf-8中char是2个字节,gbk中char是1个字节.
new String(name.getBytes(),"utf-8");
name.getBytes():把unicode编码的字符用gbk方式转化成字节数组,很显然,转化是行不通的!
然后,又把转化错了的字节数组用utf-8转化成字符,输入就错了,输出肯定不对!
String name = "中国";
String afterE = new String(name.getBytes("utf-8"),"gbk");
System.out.println(afterE);
String then = new String(afterE.getBytes("gbk"),"utf-8");
System.out.println(then);
ADE5 的 GBK 字为未被编码
9BBD 的 GBK 字为“浗”
你获得的是utf-8编码的字节,却传进gbk当然会不对了,编码他会根据你给的字节在编码表里面查找相应的字符,找不到或找错就是乱码或者奇怪文字
new String(byte[],Srting) 是将字节数组的字节转化为String(Unicode编码的),你要告诉他你给的是什么编码的字节数组
正解,要用什么编码显示就用什么编码取字节数组getBytes
和你的开发平台的默认编码格式相同
e4 b8 ad e5 9b bd 而并不知道它就是"中国",如果让程序以”中国"为参照物,那就能直接得出它在不同字符集中的编码了。
默认采用 System.getProperty("file.encoding") 系统属性中的编码。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
指定的编码有什么区别与关系,这句话不是指定编码方式吗?那我的字符串变量"中国"到底是以什么编码方式存在的呢,是系统默认的GBK还是指定的UTF-8?我发现我越来越搞不清楚了!