黑马程序员技术交流社区

标题: 字符编码---utf-8和GBK的转换问题? [打印本页]

作者: 苏乞儿    时间: 2014-9-13 02:17
标题: 字符编码---utf-8和GBK的转换问题?
傻傻分不清楚,自己画了张图,分享一下。。。。

编码示意图.png (54.37 KB, 下载次数: 22)

编码示意图.png

作者: hushiliang    时间: 2014-9-13 08:30
这个 转换 感觉没多大意义吧,什么类型编码 什么类型反编译就好了吧,感觉
作者: 格子、    时间: 2014-9-13 08:40
hushiliang 发表于 2014-9-13 08:30
这个 转换 感觉没多大意义吧,什么类型编码 什么类型反编译就好了吧,感觉 ...

确实这样,因为哪个编码造成的乱码,反转过去在转成自己需要的编码即可
作者: darkads    时间: 2014-9-13 11:32
中文或者英文字符在计算屏幕上的显示是一个点阵,说白一点就是一个稍显简单的图形,
那么,我们在计算机之间传递中文或者英文字符时,是不是要将每一个像素的内容都传递过去,这样的话文本传输就会显得很庞大,一篇文章半小时都传不完。
所以,就将每一个字符都使用一组数字来表示,就像使用字典一样(假设每一页只有一个字符),发送者告诉接收者这个字符在字典的哪一页就可以了,接收者获得了页码,就去字典里面查找,这样就传输内容就极大的减少了
但是,这会有另外一个问题,发送者使用的新华字典,而接收者使用的是牛津大词典,同样页码上的字符就不一样了,所有就要求大家使用的字典一样
这里的字典就是指UTF-8,GBK,big-5,所以进行文本传输时一定要保证双方使用的字符集一致
String中有一个方法getBytes(charset),就是将字符串转化为字节码,就是在字典charset中的页码组合
  1. String name = "你好";
  2.                 byte[] bytes = name.getBytes(Charset.forName("UTF-8"));
  3.                 String name2 = new String(bytes, Charset.forName("UTF-16"));
  4.                 String name3 = new String(bytes, Charset.forName("UTF-8"));
  5.                 System.out.println(name2);
  6.                 System.out.println(name3);
复制代码
输出结果
  1. ??
  2. 你好
复制代码
可以看到我们使用UTF-8对“你好”进行编码,分别使用UTF-16和UTF-8解码,前一个出现乱码,只有后一个正确解码,所以只需要保证解码编码前后一致就不会出现乱码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2