字符集
各类字符集
-
ASCII字符集
-
GB2312字符集
- 1980年发布,1981年5月1日实施的简体中文汉字编码国家标准,收录7445个图形字符,其中包括6763个简体汉字
-
BIG5字符集
- 台湾地区繁体中文标准字符集,共收录13053个汉字,1984年实施
-
GBK字符集
- 2000年3月17日发布,收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字
- windows系统默认使用的就是GBK,系统显示:ANSI
-
Unicode字符集
- 国际标准字符集,它将世界各种语言的每个字符都定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换
计算机的存储规则
英文ASCII
-
存储英文,一个字节都足够
-
ASCII编码规则:前面补0,补齐8位
-
ASCII解码规则:直接转成十进制
英文GBK
- 英文用一个字节存储,完全兼容ASCII
- GBK英文编码规则:不足8位,前面补0
汉字GBK
-
汉字用两个字节存储(一个)
-
高位字节二进制一定以1开头,转成十进制之后是一个负数
-
GBK汉字编码规则:不需要变动
Unicode
-
UTF:Unicode Transfer Format:将Unicode字符集中的数字进行转换格式化的一种方式
-
UTF-16编码规则:用2~4个字节保存·
-
UTF-32编码规则:固定使用四个字节保存
-
UTF-8编码规则:用1~4个字节保存
- 1个字节:ASCII
- 2个字节:拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文
- 3个字节:中日韩文字、东南亚文字、中东文字
- 4个字节:其他语言
-
UTF-8编码方式(二进制)
- 按照固定格式,其他部分由Unicode中查询到的数字的二进制形式进行填补
- 一个英文占一个字节,二进制第一位是0,转成十进制是正数
- 一个中文占三个字节,二进制第一位是1,第一个字节转成十进制是负数
乱码
产生乱码的原因
- 读取数据时未读完整个汉字
- 编码和解码时的方式不统一
如何不产生乱码
- 不要用字节流读取文本文件
- 编码解码时使用同一个码表,同一个编码方式
字节流读取中文会乱码,但是为什么拷贝
-
读取数据的时候有解码的过程,但是编码解码使用的码表不一样,产生乱码
-
在文件拷贝的过程中并没有解码的过程,只用当打开记事本时才会有解码的过程,但是同一个记事本编码解码使用的码表时一样的,因此不会产生乱码
编码和解码
Java中编码的方法
| String类中的方法 | 说明 |
|---|---|
| public byte[] getBytes() | 使用默认方式进行编码IDEA:UTF-8 eclipse:GBK |
| public byte[] getBytes(String charsetName) | 使用指定方式进行编码,要抛出异常 |
Java中解码的方法
| String类中的方法 | 说明 |
|---|---|
| String(byte[] bytes) | 使用默认方式进行解码 |
| String(byte[] bytes, String charsetName) | 使用指定方式进行解码 |