字符编码笔记



罗马计数法1到10:
I II III IV V VI VII VIII IX X XI XII


ASCII 中的 II 就表示 asc 2 字符集
最开始使用一个字节从低位开始的 7 位就可以有 128(0x00-0x7F) 种组合来表示英文及其符号,比如26个英文字母大小写52个,
各种常用符号(包括32个不可打印的控制符号)
EASCⅡ
将ASCII码由7位扩充为8位而成(前面7位与 ASCII 相同后面是扩展的)。EASCII的内码是由0到255共有256个字符组成。
EASCII码比ASCII码扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号。


以上字符集可查阅 msdn: ASCII character set。


从上面可看出,一个字节最多256个组合,若某个国家或地区文字和符号加起来超过256,比如中文一个字节无法表示数10万汉字。
中文的 GB2312 用两个字节表示,理论可以表示有 256*256 个汉字。


为能表示更多(甚至所有现存符号)需要统一字符集,若每个字符都有唯一编码则乱码问题不复存在。这样使得 unicode 产生,它是一个
很大的字符与编码一一对应的集合即每个字符有对应的二进制编码,unicode 不关心这个二进制如何存储在计算机中,即用几个字节表示,
只要存储的数据读取后能通过某种方法表示为期望的 unicode 编码即可,要让计算机知道比如2个字节是表示一个编码还是表示两个编码,
这样就出现了所谓编码方法:


UTF-8 即 unicode 的实现方式之一,其他的还有 UTF-16 和 UTF-32(互联网基本不用)
UTF-8 是变长编码(1~4个字节),这样节省数据和存储空间的冗余和浪费。比如英文用1个字节,汉字用3个字节


UTF-8的编码规则:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
下表总结了编码规则,字母x表示可用编码的位。
Unicode符号范围 | UTF-8编码方式
(十六进制范围) | (二进制字节数)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
notepad.exe 保存对话框中编码类型:
1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。
2)Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。
3)Unicode big endian编码与上一个选项相对应。我在下一节会解释little endian和big endian的涵义。
4)UTF-8编码,也就是上一节谈到的编码方法。


参考:http://blog.csdn.net/fan158/article/details/3729130
代码页参考:http://www.fmddlmyy.cn/text16.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值