字符编码(UNICODE,UTF-8,UTF-16)的理解

本文解析了UNICODE、UTF-8和UTF-16等字符编码的概念及其计算机存储方式,并介绍了UCS-2编码、字符编码转换方法及文件头标识。

网上有许多介绍UNICODE、UTF-8、UTF-16的文章,经过这几天的这方面文章的阅读,推荐三篇文章:

http://blog.youkuaiyun.com/sfdev/article/details/3770706

http://blog.youkuaiyun.com/fulinwsuafcie/article/details/6821889

http://blog.youkuaiyun.com/hikaliv/article/details/4570956

简短地总结一下:

1、UNICODE是一种为了实现全球字符的统一编码而引入的一种编码,而UTF-8,UTF-16是UNICODE在计算机中的不同存储方式。按照高字节在前还是低字节在前的不同,UTF-8和UTF-16又分为大端存储和小端存储。

2、虽然UNICODE对字符的编码最多可以支持四个字节,但是基本多语种平面基本就涵盖了平时见到的各种字符,因此UNICODE编码常采用UCS-2的编码,即一个字符用两个字节表示。因此在UCS-2中,中文和英文的编码都采用两字节表示。在vs里,可以用wchar_t表示一个UCS-2编码的字符。

3、根据文中第一个链接中讲述的UCS-4转换为UTF-8的规则,ASCII码的UCS-4编码为0000 0000 -- 0000 007F,因此转换的UTF-8为一个字节。而中日韩语音及符号区与中日韩汉字字符区的UCS-4编码为0000 2E80 -- 0000 9FA5,因此转换的UTF-8为三个字节。

4、UTF-16与UTF-8是完全不一样的存储方式。

5、如果字符编码小于0x10000,则UTF-16直接用UCS-2的两个字节表示,否则用变换后的四字节表示。根据上述第三条可见中日韩的语音及汉字区编码小于0x10000,因此它的UTF-16编码就和UCS-2的编码等同,为两字节。当然ASCII也是两字节的。

6、在vs中, 可用MultiByteToWideChar 和 WideCharToMultiByte 方法进行多字节和宽字节的相互转换。需加头文件<windows.h>。ASCII或UTF-8转UNICODE或编码小于0x10000的UTF-16,可用MultiByteToWideChar ,反之可用WideCharToMultiByte 。若ASCII转UTF-8,需将ASCII转为UNICODE,然后将UNICODE转为UTF-8。

7、文件头:FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)



需要补充的是:用记事本转换完编码格式(如UTF-8,UNICODE等)后,想用UltraEdit查看文件的十六进制编码时,需要在打开文件前在高级->配置->常规页中的加载/保存/转换部分去掉自动检测UTF-8文件前的选项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值