字符编码说明

ANSI编码
1.ASCII:1-127 表示字母数字符号
2.GB2312:两个字节,两位表示一个汉字,高位为A1-F7,低位为A1-F7,表示六千多个汉字
3.GBK:高位不变,低位拓展为1-F7,两万多汉字
4.GB18030:变长四个字节,加入几千个少数民族字符
5.Big5:台湾繁体
问题:不同国家之间语言混乱

Unicode编码
ISO统一编码
1.Unicode:宽字节 强制16位编码,有浪费,最多三位变长
2.UTF8:多字节变长 1-6
3.UTF16

CHAR/char 存ANSI与UTF8
WCHAR/wchar_t 存Unicode windows上是utf-16,在linux上实现是utf-32

个人理解,不保证正确:WCHAR宽字节是不区分编码的,只有char多字节才区分编码(UTF8/ANSI)

所以wchar转char,需要指定转成哪种编码的char,char转wchar,需要指定是从什么编码方式转过来的。

相关转换api:WideCharToMultiByte和MultiByteToWideChar

注意转换参数codepage最好写死为CP_UTF8和CP_ACP(ANSI),不要使用CP_OEMCP,因为CP_OEMCP依赖于系统当前字符设置,有可能在中文系统下正常,英文系统下就乱码。

另外不要依赖编译器的智能提示,鼠标放在字符串变量上,自动弹窗提示一堆问号,并不代表字符出了问题,要根据内存地址去查看内存信息再确认。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值