字符与字符串处理

一、字符编码

关于字符编码,首先要提到的概念是“本地化”,也有称之“本地策略”,即字符在当前系统的编码规则。
而不同的系统或者不同的编译器,会把字符根据不同的编码方式写到文件中,或者从文件中读取,典型的有ansi、Unicode、utf-8 等多种编码规则,这些规则对应不同的语种有不一样的特性,比如Unicode可以表示中文的字符、阿拉伯语等,utf-8可表示英语、欧洲、中东地区的字符等等。
既然不同的编码导致不同的数据,这就导致了乱码,程序无法正常运行,同一个"hello world"字符串,会编译出不同版本的01编码串,在不同平台解码,却得到不同的结果!

二、ansi和Unicode与字符串数据的关系

  1. ansi:单个字符编码
  2. Unicode:双字节编码
  3. 字符串数据实际上就是字符数组,即某种编码下的字符数组,c的编译器将一个char默认编码为8位,与ansi一样8位
    假如现在有个“hello world”,在ansi编码下,内存是88位的0和1,而在Unicode编码下,可能是176位(并不简单的两倍关系,此处是可能的意思)

三、window中的Unicode和Ansi函数

由于现在内存不在稀缺,以及16位编码的能力更优,window默认推荐使用Unicode编码,由于兼容旧版本系统,还继续支持ansi编码,所以底层的api函数通常有两个版本的接口。如:CreateWindowEx与CreateWindowW
底层很多的ansi函数都做过包装,转换成Unicode的api,统一使用Unicode的好处是数据通讯更加方便。
使用Unicode有以下的优势:

  1. 有利于应用程序本地化
  2. Unicode版本的二进制文件,可以支持所有语言(是所有语言,不是所有平台)
  3. 提升效率,执行代码速度更快
  4. Unicode易于与com集成
  5. 易于与.net Framework

四、Unicode与ansi的转换

  1. 系统提供MultiByToWideChar与WideCharToMultiByte进行转化
  2. 利用本地化locale和国际化facet 能力
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值