Unicode,Ansi和UTF8

      绝大多数windows API ,只能对Unicode和Ansi编码的字符串进行操作(也就是众所周知的A和W),如果你存其它编码(如UTF-8),那你就是存着自己玩,最终要做其它操作(调用系统API),还得是乖乖转换成那两种字符串中的一种。

 

      Ansi字符集。它不只是一种编码,它是多种编码的集合。如中国大陆的GBK,中国台湾的BIG5,应该说都属于Ansi。大陆和台湾两地的电脑,其Ansi编码并不相同。每种Ansi的编码,都用一个代码页来代表,如GBK的对应的代码页是936。

能称为Ansi编码的,对字符的编码都不会出现0x00,这样在算字符串长度是就不会出错。很碰巧的是UTF8,也具有这种特性,所以很多ansi的字符串操作函数,都可以直接用在UTF8身上(比如算字节数,拼接字符串等,当然如输出这类函数是不能混用的)。系统的区域设置里,可以设置系统和用户的语言格式,系统的会影响到系统默认代码页的选择。还有一个选项,非Unicode程序所使用的语言,直接设置默认代码页。

      使用Ansi字符集,就有可能碰上乱码,只要存储和使用时的编码不同,就会出现乱码。比如在GBK的机器上,保存为Ansi。在BIG5的机器上,按默认(BIG5)读取出来并显示,就会出现乱码了。搞国际化,就不能选择Ansi。Unicode编码是统一的,只有一种,在哪的机器上都不用担心会出现乱码。可惜大家并不完全买账,还是有很多人喜欢用Ansi和UTF8。

      UTF8也是统一的,只有一种。英文和数字占一个字节,欧系语言字符占两个字节,中文占三个字节(中文真亏)。用UTF8也不会有乱码问题。但是前面说了,没有API能直接对UTF8进行操作,所以使用时经常要先转成Ansi或Unicode中的一种。但UTF8没有0x00编码的特性,使得它又可以直接用在一些Ansi字符串操作函数上。所以一些比较古老的程序,在碰到乱码问题时,选择UTF8,可能修改代价会比较小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值