url中文编码
含中文的URL需要编码后才能在网络中传输,对于下面这个URL
http://www.oschina.net/search?scope=bbs&q=流行
编码为http://www.oschina.net/search?scope=bbs&q=%E6%B5%81%E8%A1%8C
这个例子中对流行UTF-8编码,每个汉字编码成3个%xx。
如果使用gbk(GB2312)编码,一个汉字对应两组%xx,即%xx%xx
一个好用的在线编码转换器:https://tool.oschina.net/encode?type=2
unicode 与utf-32、utf-16
Unicode 是字符集,UTF-8 是编码规则
- Unicode为世界上所有字符都分配了一个唯一的数字编号,这个编号范围从 0x000000 到 0x10FFFF(十六进制),有110多万,每个字符都有一个唯一的Unicode编号,这个编号一般写成16进制,
- 它是一种规定,Unicode本身只规定了每个字符的数字编号是多少,并没有规定这个编号如何存储。比如:马的Unicode为:U+9A6C
utf32指将Unicode编码直接按二进制存储
- 每个字符实际需要24bit,但考虑到计算机的存储器是方便处理32位的数据而不方便处理24位的数据,所以一个utf-32编码的字符占4个字节
- 由于存储和处理单元是32位所以需要考虑大小端的问题。
UTF-16使用变长字节表示
- 对于编号在U+0000到U+FFFF的字符(常用字符集),直接用两个字节表示。
- 编号在 U+10000到U+10FFFF之间的字符,需要用四个字节表示。
- UTF-16 也有字节的顺序问题(大小端),所以就有UTF-16BE表示大端,UTF-16LE表示小端。
utf-8
UTF-8就是使用变长字节表示,顾名思义,就是使用的字节数可变,这个变化是根据 Unicode 编号的大小有关,编号小的使用的字节就少,编号大的使用的字节就多。使用的字节个数从1到4个不等。
UTF-8的编码规则:
- 对于单字节的符号,字节的第一位设为0,后面的7位为这个符号的Unicode码,因此对于英文字母,UTF-8编码和ASCII码是相同的。
② 对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10,剩下的没有提及的二进制位,全部为这个符号的Unicode码 。
Unicode编号范围与对应的UTF-8二进制格式 :