A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qixing0918 中级黑马   /  2013-10-29 15:12  /  963 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马