Web乱码与字符集的理解

来源:互联网 发布:淘宝彩妆店铺名字 编辑:程序博客网 时间:2024/05/17 04:55

磁盘上文件的存储形式:所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.

字符编码(encoding)就是把字符按照某种映射标准(字符集)转换成字节。例如打开一个空记事本,然后在记事本中写入"hello world"--〉另存为(默认的ASICC字符集)--->asc.txt 这时asc.txt就以ASCII编码的字节序列存储在磁盘上,如果要读这个文件,也就是将这个字节序列按照原字符集转换成字符串(解码:decoding),所以处理好编码<=>字符集<=>解码就是关键.

字符集就像棋盘,每个字符(棋子)用一个字节(棋格)映射。

 

ISO8859:8位的字符集,0~0x7F仍与ASCII字符集保持兼容,大于0x7F的是各种拉丁字符或欧洲字符的扩展。

GB2312: 8位的字符集,如果当前字节(8 bit)小于0X80,则仍当它为英文字符与(ASCII兼容);如果它大于等于0x80,则它和紧接着它的下一个字节构成一个汉字字符,这样,GB2312字符集可包含大约4000多个常用简体汉字和其他汉字中的特殊符号(如①㈠之类)。

GBK:GB2312的扩展集,和GB2312兼容.

Unicode: 16位的字符集,Unicode的主要目标是提供一个“通用字符集”。

 

UTF-8: Unicode的使用、存储与传输,都极其浪费空间,所以在此基础上出现了UTF-8字符编码的规范,在UTF-8中,属于US-ASCII中的字符,仍用一个字节表示,且和US-ASCII兼容,编码其他的字符,则用1(大于0x7F部分)到3个字节. (编码中文用3个字节) 

 

JVM编译器使用系统默认的字符集encoding/decoding.我的系统为win2000Server 默认字符集为GBK。编译过程如下

 

1.javac Test.java ===>编译器实际上执行了 javac -encoding GBK Test.java

 

2.在类装载器中加载这个Test.class文件,编译器再用GBK字符集解读这个Test.class 

原创粉丝点击