public class Unicode {
public static void main(String[] args) throws UnsupportedEncodingException{
char c='编'; // 我们都知道c占用2个字节,这毫无疑问。
String str="张三";
byte[] bytes=str.getBytes("GBK"); //这个打印出来,在不同的操作系统上可能有不同的
String utf8 = new String(bytes, "UTF-8");
byte[] uftBytes = utf8.getBytes("UTF-8");
System.out.println(new String(uftBytes, "GBK"));
}
GBK转换成UTF-8然后回转换成GBK无法还原字符
public class Unicode {
public static void main(String[] args) throws UnsupportedEncodingException{
char c='编'; // 我们都知道c占用2个字节,这毫无疑问。
String str="张三";
byte[] bytes=str.getBytes("UTF-8"); //这个打印出来,在不同的操作系统上可能有不同的</span>
String utf8 = new String(bytes, "GBK");
byte[] uftBytes = utf8.getBytes("GBK");
System.out.println(new String(uftBytes, "UTF-8"));
}
UTF-8转换成GBK然后回转换成UTF-8可以还原字符(必须全部是中文,如果包含英文会出错)
转码分析:
UTF-8:已三个字节存储汉字,一个字节存储英文字母。
GBK:两个字节存储汉字,一个字节存储英文字母。
如果将UTF-8转成成字符数组如果两个个汉字加一个字母则总共7个字节,
此时更加GBK编码转换成Unicde,则前六个字节可以拼装成三个字,后面一个字节GBK无法识别则用3F表示此字节则丢失了最后一个字节
那么再反向转换为UTF-8则字节已经丢失。
如果将GBK转换成UTF-8 如果两个汉字则有四个字节,然后将字节数组封装成UTF-8, UTF-8无法识别字符组对应的转码后的字符则生成unicode,变成了乱码。