常见的编码表
ASCII: 美国标准信息交换码
用一个字节的7位可以表示
ISO-8859-1:拉丁码表。欧洲码表
用一个字节的8位表示
GB2312:中国的中文编码表
GBK:中国的中文编码表升级,融合了更多的中文文字符号
Unicode:国际标准码,融合了多种文字
所有文字都用两个字节来表示,java语言使用的就是unicode
UTF-8(8-bit Unicode Transformation Format):最多三个字节表示一个字符
GBK
编码/解码
编码:字符串转换为字节数组
String -->byte[] : String.getBytes();
解码:字符数组变为字符串
Byte[] -->String : new String(byte [] );//使用的是默认编码
new String(byte [] ,charsetName)
字符流的出现:当处理文本数据的时候,单独分离出来的字符流
在计算机中,
要让计算机识别生活正的数据,用010101识别生活中的数据
在外国,用10101来识别英文字母,有一个 一一对应的标码表,即ASCII(美国标准编码表)
在中国,为了让计算机能够识别中文,1010跟中文对应的表就是 gb2312 , 这张表里收集了几千个汉字,但汉字博大精深, 后来又扩容 扩容的表就是GBK,
在外国,用10101来识别英文字母,有一个 一一对应的标码表,即ASCII(美国标准编码表)
在中国,为了让计算机能够识别中文,1010跟中文对应的表就是 gb2312 , 这张表里收集了几千个汉字,但汉字博大精深, 后来又扩容 扩容的表就是GBK,
把各个国家的文字全部重新编排 包含在一张编码表里面,就是unicode (国际标准编码表) 后期经过优化 就是UTF-8表,在unicode 里面无论什么字符 都是 2个字节表示(16个二进制位)
UTF-8出现的又来(为什么优化)
一个英文字母用一个字节就可以表示,没有必要用两个字节表示
一个字节装不下的字符 就用2个字节
2个字节装不下的 就用3个字节(3个肯定够)
一个英文字母用一个字节就可以表示,没有必要用两个字节表示
一个字节装不下的字符 就用2个字节
2个字节装不下的 就用3个字节(3个肯定够)
字符流:
一个中文汉字(例如“我”),在GB2312编码表 中能被识别;在GBK中也能被识别,在UTF-8中也能被识别,但他们对应的数据是不一样的,所以当我们想在一台(GBK编码的系统)电脑上读取另一台电脑(UTF-8编码的系统)上的文件的时候 就没法读取了。为了解决这个问题,java在流技术上 基于字节流产生了一个字符流。
字符流的好处: 在内部融合编码表,在读取文件的时候,到底是用UTF-8编码表还是用GBK的编码表读取文件 可以自决定。