Encoding 编码
ASCII
英文字符编码,只用了低七位。表示0~127。
单字节(8bit)存储,最高位是奇偶校验位。
UTF-7
UTF-7
每个字节只用7位(最高位总是0)。
A Mail-Safe Transformation Format of Unicode(RFC1642)。这是一种使用7位ASCII码对Unicode码进行转换的编码。将Unicode字元以ASCII编码的字元串来呈现。
设计目的是为了在只能传递7位编码的邮件网关中传递信息。
UTF-7对英语字母、数字和常见符号直接显示,而对其他符号用修正的Base64编码。
符号+和-号控制编码过程的开始和暂停。所以乱码中如果夹有英文单词,并且相伴有+号和-号,这就有可能是UTF-7编码。
UTF-7并不特别安全或可靠,已较少使用,通常采用UTF-8。
Unicode
可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。
只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。
覆盖范围广,存储上造成一定的浪费。为节约存储,有多种存储方式。
比如“严”的Unicode码为:4E25(2个字节表示)。
UTF-8
在互联网上使用最广的一种Unicode的实现方式。
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者传输的时候,就转换为UTF-8编码。
其他实现方式还包括UTF-16和UTF-32,用的较少。
UTF-8是一种变长的编码方式,编码后的大小是不一定的。
编码 | 表示 | 备注 |
---|---|---|
一个字节 | 0******* | 7位表示,0是标识符, 编码与ASCII相同,表示0~127的英文字母 0000 0000-0000 007F |
两个字节 | 110***** 10****** | 首字节的110,第二个字节的10都是标识符,其余位组成Unicode码(8~11位), 0000 0080-0000 07FF |
三个字节 | 1110***** 10****** 10****** | 12~17位,通常表汉字 0000 0800-0000 FFFF |
四个字节 | 11110**** 10****** 10****** 10****** | 18~22位 其他生僻字符 0001 0000-0010 FFFF |
五个字节 | 111110*** 10****** 10****** 10****** 10****** | 23~27位 0011 0000-0011 FFFF |
六个字节 | 1111110** 10****** 10****** 10****** 10****** 10****** | 28~32位 |
“严”的二进制:4E25=100111000100101,15位就能表示,在UTF-8编码中需要三个字节,依次从后往前填充,结果为:1110**100 10111000 10100101(多出的位补0),转换成十六进制即为:E4B8A5
Little endian和Big endian
Big endian,大端序。编码顺序,高位在前,低位在后。
Little endian,小端序。编码顺序,低位在前,高位在后。
“严”的表示,大端序:4E 25;小端序:25 4E;
txt文件的编码格式,存储在开头的几个字节中。(FF、FE)Unicode、(FE、FF)Unicode bigendian、(EF、BB、BF)UTF-8等。
HttpUtility
System.Web.HttpUtility