今天舍友突然问了C#的编码是啥?突然发现我似乎不清楚编码,甚至忘记了。现在我们来学习一下
编码:就是0和1去表示我们使用的字符,因为计算机内是二进制的。把我们的字符编码成计算机语言
ASCII:
八个二进制位等于一字节(byte),可以组合出256种状态,从00000000到11111111
基本表7位128个。如大写字母A是65(01000001)——英文是够用的
扩展表8位256个——欧洲国家不够用,但是每个不同国家128-255这段是不同的
GB2312:(最常见的简体中文编码)
因为汉字符号很多,一个字节不够,所以是两个字节表示一个汉字(2^16=65536)
Unicode:(统一的编码)
很多种的编码方式,同一个二进制数字可以被解释成不同的符号。因此打开一个文件,就必须知道它的编码方式,否则就会出现乱码了。
Unicode就是想将世界上所有的符号纳入其中,所有的符号都是同一套编码
两个问题:
(1)计算机怎么知道三个字节表示一个符号,而不是表示三个符号
(2)如果统一规定,每个符号用三个或4个字节表示,那英文字母前面有二到三个字节0,浪费
所以出现很多种存储方式并且很长一段时间都无法推广,直到互联网出现
UTF-8:(Unicode的实现方式之一)
互联网的普及,要求出现一种统一的编码方式。UTF-8是互联网上使用最广的Unicode实现方式。
其他的实现包括UTF-16(两个或四个字节)和UTF-32(用四个字节)
UTF-8最大特点是变长的编码方式。用1-4个字节表示一个符号
(1)对于单字节,第一位为0
(2)对于2字节以上,第一个字节前n位为1,然后n+1位为0,后面字节前两位为10
0xxxxxxx 110xxxxx 10xxxxxx 1110xxxx 10xxxxxx 10xxxxxx 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Big5: (繁体字)
有空再更新深入的