We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ASCII占用8位(bit)。8个bit可以表示256个字符。
ASCII码只规定了128个字符的编码。
ASCII码的问题是字符太少,不能满足世界各国的需要。所以各国其他编码利用剩余的128个字符定义各自不同的编码。
汉字GB2312 使用两个字节(16位),最多表示65536个字符。
一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE gb2312中两个字符组成的编码的字符叫做“全角”字符,而原来在127号以下的那些就叫”半角”字符了
一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE
gb2312中两个字符组成的编码的字符叫做“全角”字符,而原来在127号以下的那些就叫”半角”字符了
对GB2312扩展就得到了GBK,再扩展得到GB18030(少数民族文字)。
所以,一个字节小于127的编码都按照ASCII码查,大于127的字节+之后的字节(一共两个字节16位)组成汉字的编码。
所以,“一个汉字两个英文字符”就是这么来的。
为了统一一种编码,Unicode出现了。
Unicode 目前规划的总空间是17个平面(平面0至16),0x0000 至 0x10FFFF。最前面的65536个字符位,称为基本平面(缩写BMP) 。每个平面有 65536 个码点。
Unicode只规定了每个字符的码点,到底用什么样的字节序表示这个码点,就涉及到编码方法。
最直观的编码方案就是 UTF-32
The characters “U+” are an ASCIIfied version of the MULTISET UNION “⊎” U+228E character (the U-like union symbol with a plus sign inside it), which was meant to symbolize Unicode as the union of character sets. See Kenneth Whistler’s explanation in the Unicode mailing list. (https://stackoverflow.com/questions/1273693/why-is-u-used-to-designate-a-unicode-code-point)
由于Unicode是0x0000 至 0x10FFFF,直接用定长的4个字节来表示对应的字符
U+0000 = 0x0000 0000 U+597D = 0x0000 597D
这样好处是直观,但是太浪费空间了。
为什么不用utf-24呢?都用3个字节表示。 Why is there no UTF-24?
为什么不用utf-24呢?都用3个字节表示。
Why is there no UTF-24?
UTF-8是一种变长的编码,从1字节到4字节。
英文字母为1个字节,汉字为3个字节。
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
The text was updated successfully, but these errors were encountered:
No branches or pull requests
目录
ASCII 编码
ASCII占用8位(bit)。8个bit可以表示256个字符。
ASCII码只规定了128个字符的编码。
ASCII码的问题是字符太少,不能满足世界各国的需要。所以各国其他编码利用剩余的128个字符定义各自不同的编码。
GB2312 & GBK
汉字GB2312 使用两个字节(16位),最多表示65536个字符。
对GB2312扩展就得到了GBK,再扩展得到GB18030(少数民族文字)。
所以,一个字节小于127的编码都按照ASCII码查,大于127的字节+之后的字节(一共两个字节16位)组成汉字的编码。
所以,“一个汉字两个英文字符”就是这么来的。
Unicode
为了统一一种编码,Unicode出现了。
Unicode 目前规划的总空间是17个平面(平面0至16),0x0000 至 0x10FFFF。最前面的65536个字符位,称为基本平面(缩写BMP) 。每个平面有 65536 个码点。
Unicode只规定了每个字符的码点,到底用什么样的字节序表示这个码点,就涉及到编码方法。
最直观的编码方案就是 UTF-32
UTF-32
由于Unicode是0x0000 至 0x10FFFF,直接用定长的4个字节来表示对应的字符
这样好处是直观,但是太浪费空间了。
UTF-8
UTF-8是一种变长的编码,从1字节到4字节。
英文字母为1个字节,汉字为3个字节。
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
Reference
The text was updated successfully, but these errors were encountered: