今天遇到了C#编程中的托管与非托管类型之间的数据传送,中间碰到了关于StructLayout设置中的CharSet,看看了参数类型CharSet的成员,其中有ANSI和UNICODE,现针对这两种编码方式说一下我自己的理解:
1.编码方式:最大的区别就是ANSI中的字符采用8bit,UNICODE中的字符采用16bit。UNICODE针对中英文字符采用的都是双字节,但是ANSI用单字节表示英文字符,双字节表示中文字符。很显然,8比特的ANSI编码最多表示256种字符,再加上词类丰富的汉语言特点、其他国家的韩语、日语等不足以表示出的,这也是UNICODE编码出现的原因之一。
2.应用:现在的网络、windows操作系统以及很多大型软件中使用的UNICODE编码。但是目前windows系统中的记事本默认是ANSI编码,比如当txt文档中一切字符都在 C0≤AA≤DF 80≤BB≤BF 这个范围时,notepad都无法确认文档地格式,没有自动依照UTF-8格式来"Display"。 而"联通"就是C1 AA CD A8,刚好在上面地范围内,所以不能正常显现。所以当我们在文本文档中只存储了联通两个字时再次打开会是乱码,当然了,我们可以以unicode、unicode big endian、UTF-8的编码方式存储,这样乱码就可以避免了。
以上只是一些浅层的区别,关于深入的系统内部叙区别以及使用需要额外多查阅资料了。。
阅读(1357) | 评论(2) | 转发(0) |