字符编码:UTF-8、ASCII、ANSI
一、字符编码
字符编码(英语:Character encoding)是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储
和通过通信网络的传递
字符编码的主要目的是为了存储和通讯,但全世界各个国家都有不同的字符,且字符数量也不相同,故全世界各个国家、地区都有一套编码规则。
对于计算机来说,所有的信息都要是二进制(即0/1)数据才能处理。但对于人来说,二进制的数据根本就看不懂,那么就需要将二进制数据编码成人可以理解的字符。
1️⃣ 文本(ASCII)转换成二进制
💡 注意100和abc之间的空格,空格也算一个ASCII字符
对于ASCII编码:100 abc
,字符:1
、 0
、 空格
、 a
、b
、c
,查找ASCII对照表
转换成对应的二进制:00110001 00110000 00110000 00100000 01100001 01100010 01100011
2️⃣ 文本(UTF-8)转换成二进制
💡 UTF-8中的 ASCII字符用 1Byte 二进制表示,中文字符用 3Byte 二进制表示
对于UTF-8编码:5你好
转换成对应的二进制:00110101 11100100 10111000 10101101 11100101 10011011 10111101
二、ASCII编码
ASCII(发音: /ˈæski/ ASS-kee[1],American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母
的一套电脑编码系统
ASCII将字母
、数字
和其它符号
编号,并用7bit
的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1Byte
的方式存储。
-
控制字符的ASCII值范围是 0 ~ 31 和 127(即0x00 ~ 0x1F 和 0x7F),共
33个字符
-
显示字符ASCII值范围是 32 ~ 126(即0x20 ~ 0x7E),共
95个字符
。
三、UTF-8编码
Unicode是ASCII(美国信息交换标准码)字符编码的一个扩展,形成了例如UTF-8
、UTF-16
、UTF-32
最大的特点是可变长编码
,例如英文字符可以用1个字节表示,中文可以用3字节表示,可以节省存储空间和传输带宽(相比Unicode编码)
四、ANSI编码
ANSI是一种字符代码,为使计算机支持更多语言,通常使用 0x00~0x7F
范围的1个字节来表示1个英文字符,超出此范围的使用 0x80~0xFFFF
来编码,即扩展的ASCII编码
ANSI不是指的一种特定的编码,而是不同地区扩展编码方式的统称,各个国家和地区所独立制定的兼容ASCII,但互相不兼容的字符编码,微软统称为ANSI编码
-
中国大陆(简体)扩展了GB2312编码
-
中国台湾(繁体)扩展了Big-5编码
-
中国香港扩展了HKSCS编码
-
日本扩展了Shift_JIS编码
-
韩国扩展了EUC-KR编码
-
...
若存储和打开文件的编码格式不一致,基本会出现常见的火星文乱码,这个时候不要慌,选择正确的编码格式打开文件就好了
五、程序读写编码
程序打开文件需要说明文件的编码格式:text mode
和 binary mode
。
区别:text mode
以 字符 为单位进行读写,而 binary mode
以 字节 为单位进行读写