黑马程序员技术交流社区
标题:
中文与编码问题
[打印本页]
作者:
qixing0918
时间:
2013-10-29 15:12
标题:
中文与编码问题
本帖最后由 qixing0918 于 2013-10-31 15:59 编辑
在java中char有两个字节 char='a'; char='你'
a占一个字节(另外8位不用) 而 中文是把16位都用了才能表示一个汉字
汉字字符 2字节
英文字符 1字节
中文标点 2字节
英文标点 1字节
中国字比较复杂,1字节=8位,8位从0000 0000到1111 1111只能表示256个字符,2个字节是2*8=16位,从0000 0000 0000 0000到1111 1111 1111 1111可以表示65535个字符。
6万多个足以表示我们经常用的那些字了。所以我们用2字节表示汉字。如果用3个字节有很多不常用的字又占了很多不必要的存储空间,所以我们用2个字节而不是1个或者3个表示汉字的国际码。
什么时候出现乱码
1. 假如你用fileReader 读一个文本文件 这个文本文件用的是Utf-8 这样就会出现乱码 因为fileReader用的是默认GBK的编码 你用GBK去解码UTF-8的文本就会乱码
底层是 读两个字节去查GBK码表 但是UTF-8是3个字节一个汉字 你两个字节去查码表一定会乱码
2.乱码与系统没关系(java跨平台的)
只与编码和解码有关 解码就是把2进制数变成汉字(要去查码表) 编码是把汉字变成2进制(同样要去查码表) 但如果查的码表不同就会乱码
老外 ASCII 码 没有中文都是 abc...
中国 GB2312--->GBK---->GB18030 中文两个字节
所有人 unicode--->UTF_8 中文三个字节
三个字节比两个字节浪费空间 所以很多人都愿意用GBK
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2