常见字符集介绍
字符集基础知识
- 计算机底层不可以直接存储字符,计算机中底层只能存储二进制
- 二进制时可以转换成十进制的
- 结论:计算机底层可以表示十进制编号。计算机可以给人类字符进行编号存储,这套编号规则就是字符集
ASCII字符集
- ASCII(美国信息交换标准编码):包括了数字、英文、符号。
- 使用1个字节存储一个字符,一个字节是8位,总共可以表示128个字符信息,对于英文,数字来说是够用的
GDK
- window系统默认的码表,兼容ASCII码表,也包含了几万个汉字,并支持繁体汉字以及部分日韩文字
- 注意:GBK是中国的码表,一个中文以两个字节的形式存储。但不包含世界上所有国家的文字
Unicode码表
- 又称统一码、万国码、单一码
- 是计算机科学领域里的一项业界字符编码标准
- 容纳世界上大多数国家所有常见文字和符号
- 由于Unicode会先通过UTF-8、UTF-16、UTF-32的编码成二进制后再存储到计算机,其中最为常见的就是UTF-8
注意:
- Unicode是万国码,以UTF-8编码后一个中文一般以三个字符的形式进行存储
- UTF-8也要兼容ASCII编码表
- 数字和英文等在任何国家的字符集中都占1个字节
- 技术人员都应该使用UTF-8的字符集编码
- 编码前和编码后的字符集需要一致,否则会出现中文乱码
汉字存储和展示过程解析
一段文字 -> 查询Unicode码表 -> 码表中对应的数字 -> 编码(utf-8)成二进制,存储到计算机中
逆过程:
读取二进制 -> 解码(utf-8)码表中对应的数字 -> 查询Unicode码表 -> 展示文字
中文的第一个字节和英文的第一个字节有一定的规律。
字符集的编码、解码操作
- String提供的API
- 如何使用程序对字符进行编码?
- String类下的方法:
- byte[] getBytes():默认编码
- byte[] getBytes(String charsetName):指定编码
- 如何使用程序进行解码?
- String类的构造器:
- String(byte[] bytes):使用默认编码解码
- String(byte[] bytes, String charsetName)):指定编码解码