一、字符编码历史 字符编码历史,这里我们引入园友的文章: http://www.cnblogs.com/KevinYang/archive/2010/06/18/1760597.html 计算机一开始发明的时候是用来解决数字计算的问题,后来人们发现,计算机还可以做更多的事,例如文本处理。但由于计算机只识“数”,因此人们必须告诉计算机哪个数字来代表哪个特定字符,例如65代表字母‘A’,66代表字母‘B’,以此类推。但是计算机之间字符-数字的对应关系必须得一致,否则就会造成同一段数字在不同计算机上显示出来的字符不一样。因此美国国家标准协会ANSI制定了一个标准,规定了常用字符的集合以及每个字符对应的编号,这就是ASCII字符集(Character Set),也称ASCII码。 当时的计算机普遍使用8比特字节作为最小的存储和处理单元,加之当时用到的字符也很少,26个大小写英文字母还有数字再加上其他常用符号,也不到100个,因此使用7个比特位就可以高效的存储和处理ASCII码,剩下最高位1比特被用作一些通讯系统的奇偶校 二、各编码的结构特征 此后就出现了各国不够用的情况,所以陆续出现格式版本. UTF-8:将部分字符编码成一个字节,将部分字符编码成2个字节,将部分字符编码成3个字节,将部分字符编码成4个字节.将128(0X0080)以下的编码成 1个字节(赢美),将(0X0080-0X07FF)编码成两个字节(欧洲,东亚),0X07FF以上使用3个字节编码,最后代理项对编码成4个字节. UTF-16:将每个16位字符编码成两个字节,因为不会存在压缩处理,所以性能很好.它也称为UNIOCDE编码 UTF-32:使用四个字节来编码所有字符,看似万能,但处理性能较低. UTF-7:已被UNICODE协会淘汰. ASCII:将16字符编码成ascii字符,小于128的的16字符将被用单字节保存所以效率很好,超过的0X07FF的字符是不能转换的,否则字符值会丢失. 三、C#编码解码例子 此处引用http://blog.csdn.net/xyjnzy/article/details/5072057 //1.获得汉字的区位码 byte[] array = new byte[2]; array = System.Text.Encoding.Default.GetBytes("啊"); int i1 = (short)(array[0] - ''/0''); int i2 = (short)(array[1] - ''/0''); //2.unicode解码方式下的汉字码 array = System.Text.Encoding.Unicode.GetBytes("啊"); i1 = (short)(array[0] - ''/0''); i2 = (short)(array[1] - ''/0''); //3.unicode反解码为汉字 string str = "4a55"; string s1 = str.Substring(0,2); string s2 = str.Substring(2,2); int t1 = Convert.ToInt32(s1,16); int t2 = Convert.ToInt32(s2,16); array[0] = (byte)t1; array[1] = (byte)t2; string s = System.Text.Encoding.Unicode.GetString(array); //4.default方式反解码为汉字 array[0] = (byte)196; array[1] = (byte)207; s = System.Text.Encoding.Default.GetString(array); //5.取字符串长度 s = "iam方枪枪"; int len = s.Length;//will output as 6 byte[] sarr = System.Text.Encoding.Default.GetBytes(s); len = sarr.Length;//will output as 3+3*2=9 //6.字符串相加 System.Text.StringBuilder sb = new System.Text.StringBuilder(""); sb.Append("i "); sb.Append("am "); sb.Append("方枪枪"); string --> byte array byte[] data=Syste.Text.Encoding.ASCII.GetBytes(string); string --> byte byte data = Convert.ToByte(string); byte[]-->string string string = Encoding.ASCII.GetString( bytes, 0, nBytesSize ); 四、Encodiing类的使用 Encodiing类中提供了许多静态属性如:Unicode,UTF32,UTF7,ASCII,Default等,它们会返回一个对象用于处理对应的字符编码,值得注意的是不要使用Default属性,因为如此以来,您开发的程序就会受到运行计算机的影响,它会使用当前计算机中所默认的字符编码处理方案. 五、您若觉得不错的,请支持. 相关文章: 2022-01-09 2021-12-25 2022-12-23 2022-12-23 2022-12-23 2021-10-11 2021-10-21