字符编码 与 解码
程序员文章站
2024-03-13 09:39:09
...
字符编码
字符编码,也称字集码,是把字符集中的字符编码为指定集合中某一对象,以便文本在计算机中存储和通过通信网络的传递。
字符是各种文字和符号的总称,包括各个国家文字、标点符号、图形符号、数字等。字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集有: 字符集、ISO 8859字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。
所以:
字符----是文字与符号的统称。
字符集----是字符集集合。
字符编码----就是字符集中的每一个字符对应的一串二进制数字,用来标识字母、数字以及一些专用符号。
常见的编码有:
ISO8859-1:
编码属于单字节编码,最多只能表示0~255的字符范围,主要在英文上应用。
GBK/GB2312:
中文的国际编码,专门用于表示汉字,是双字节编码。
Unicode:
Java中就是使用这种编码方式,也是最标准的一种编码,是使用16进制表示的编码。但是,此编码不兼容ISO8859-1编码。
UTF:
由于Unicode不支持ISO8859-1编码,而且容易占用更多的空间,而且对于英文也需要是用两个字节编码,这样使用Unicode不便于传输和储存。因此产生了UTF编码。UTF编码兼容了ISO8859-1编码,也可以用来表示所有语言字符,不过UTF是不定长编码,每个字符的长度从1~6个字节不等,一般在中文网页中国使用此编码,因为这样可以节省空间。
ASCII:
ASCII 码是由美国国家标准委员会制定的一种包括数字、字母、通用符号、控制符号在内的字符编码集,全全称叫做美国国家信息交换标准码(American Standard Code for Information Interchange),被国际标准化组织(ISO)指定为国际标准。ASCII 码是一种7位二进制编码,能表示2^7 = 128种国际上最通用的西文字符。ASCII码是单字节码,在计算机内部,最高为设为0。
所有的符号( 字符、字母、中文等),其实本质上在计算机内部都只是“数字代号”—-我们看到的是这个数字代号所代表的“图形”。
计算机最初的时候只规定了127个符号。-- ASCII。后来,计算机传播到别的国家,各个国家都想用自己国家的文字来操作计算机。于是对自己国家的文字进行了同样原理的“字符编号”。 所以在国与国之间传递的时候在本国无法解析,于是乎就有可能出现乱码或者不同样的意思。
造成乱码的根本原因:
1、程序使用的编码与本机的编码不统一。
2、在网络中,客户端与服务器编码不统一。
如果我们文件的实际保存编码和代码中的声明编码不一致就很可能产生乱码。
解码
正常解码后的字符串对象可以用任意方式编码。所以必须用对应的编码方式解码。如果没有采用与其相对应方式解码时,就会出现乱码。
栗子
String str = "今天";
byte[] btstr = str.getBytes("utf-8"); // 使用utf-8编码
String bs1 = new String(btstr, "gbk"); // 不对应的解码方式
String bs2 = new String(btstr, "utf-8"); // 对应的解码方式
System.out.println("bs1--->" + bs1);
System.out.println("bs2--->" + bs2);
结果:
bs1--->浠婂ぉ
bs2--->今天
设置统一的编码格式一般都不会产生乱码问题
内存中的数字被解释为字符时,就是解码的过程,反过来把文字和符号用数字定义时就是编码。