上QQ阅读APP看书,第一时间看更新
4.2 字符编码
1.UTF-8
采用变长字节表示字符,最多可用到6个字节。
2.UTF-16
采用2字节,Unicode中不同部分的字符同样基于现有的标准,这是为了便于转换。
从0×0000到0×007F是ASCII字符,从0×0080到0×00FF是ISO-8859-1对ASCII的扩展。
希腊字母表使用从0×0370到0×03FF的代码,斯拉夫语使用从0×0400到0×04FF的代码,美国使用从0×0530到0×058F的代码,希伯来语使用从0×0590到0×05FF的代码。
中国、日本和韩国的象形文字(总称为CJK)占用了从0×3000到0×9FFF的代码;由于0×00在C语言及操作系统文件名中有特殊意义,很多情况下需要UTF-8编码保存文本,去掉这个0×00。举例如下:
UTF-16:0×0080 = 0000000010000000
UTF-8:0xC280 = 1100001010000000
UTF-32:采用4字节。
3.UTF-8、UTF-16和UTF-32的优缺点
UTF-8、UTF-16和UTF-32都可以表示有效编码空间(U+000000~U+10FFFF)内的所有Unicode字符。
使用UTF-8编码时ASCII字符只占1个字节,存储效率比较高,适用于拉丁字符较多的场合以节省空间。
对于大多数非拉丁字符(如中文和日文)来说,UTF-16所需存储空间最小,每个字符只占2个字节。采用UTF-16和UTF-32会有Big Endian和Little Endian之分,而UTF-8则没有字节顺序问题,所以UTF-8适合传输和通信。
UTF-32采用4字节编码,一方面处理速度比较快,但另一方面也浪费了大量空间,影响传输速度,因而很少使用。