##关于字符编码
内容涉及:
- UTF-8编码
- UTF-16编码
你好
UTF8编码:E4 BD A0 E5 A5 BD
计算UTF-16编码得到:
UTF16编码: 4F 60
https://home.unicode.org/
Unicode,统一码、万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。早期的Unicode字符集(Unicode Character Set)使用2字节编码,即UCS-2。后来又出现了4字节编码,即UCS-4
UCS在计算机中的存储格式叫做UTF(Unicode Transformation Format)
UCS-2最直接的存储格式就是UTF-16了。UTF-16是完全对应于UCS-2的,即把UCS-2规定的字符直接保存下来。而根据字符序,又分为UTF-16LE (Little Endian)和UTF-16BE (Big Endian)。那如何判断某个文件使用的是UTF-16BE还是UTF-16LE呢?可以在文件头部添加BOM(Byte Order Mark)。由于UCS-2没有定义FFFE, 因此规定只要出现FFFE就是UTF-16LE,出现FEFF就是UTF-16BE
UTF-32就简单了,它用四个字节表示字符,这样就可以完全表示UCS-4,而无需像UTF-16那样使用复杂的算法。 与UTF-16类似,UTF-32也包括UTF-32、UTF-32LE、UTF-32BE三种编码,UTF-32使用的BOM就是FFFE0000(UTF-32LE)和0000FEFF(UTF-32BE)
实际计算机中存储的字符,多数在ASCII的范围内,不管使用UTF-16还是UTF-32都会造成很大的浪费
因此,又提出了用1~4个字节来表示的UTF-8,方式如下
可见,ASCII字符(0000-007F)只使用一个字节,避免了空间的浪费。而且UTF-8不再需要BOM字节了。另外,从表中可以看出,从首字节的取值范围就可以知道编码的字节数,这样大大简化了算法
话说,制定标准的这伙儿人呀,智商实在是高
待补充UTF-32编码
纸上得来终觉浅, 绝知此事要躬行。