C/C++字符乱码研究

字符串显示到UI界面上大致有三个阶段:源文件编码格式、编译存储编码格式、执行编码格式

1,源文件编码格式

我们的C/C++源文件一般有GBK、UNICODE(UTF8、UTF16、UTF32)等编码格式,其中UTF8分为带BOM和不带BOM,BOM其实就是标记双字节或者四字节字符是大端还是小端存储,所以其实UTF8是不需要BOM标记的。VC编译器不认不带BOM的UTF8文件,也就是VC编译器会把不带BOM的UTF8源文件当成ANSI编码处理,这种情况下如果你的代码里的字符串有中文字符肯定会乱码,原因是编译器不能正确转换字符串到存储编码格式。 

2,编译存储编码格式

即编译器将源文件中的字符串常量(例如字符串 "中国" )编译存储到静态存储区中所用的编码格式 ,说明下 :L"中国",u"中国",U"中国" 等字符串常量显示指定了存储编码格式,编译器会按照你指定的去转码存储到静态存储区。 那么 char str[] = "中国" 这种字符串编译存储编码到底用什么格式呢?分两个阶段,首先在编译后字符串"中国"就存在静态存储区,然后运行时用这个内存初始化字符数组;

(1)VC编译器  在在VC下和本地化locale有关,如果你的系统是简体中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值