ansic、utf8、unicode互相转化

本文介绍了C++项目中字符编码的问题,强调了Unicode作为通用编码的重要性。讨论了Unicode、UTF-8和ANSI之间的关系,以及在Windows平台下如何利用C++11的接口和Windows API进行不同编码间的转换。详细阐述了WideCharToMultiByte和MultiByteToWideChar函数在转换过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:http://hexo.liferecords.top/post/3147335795.html
点击原文阅读,体验更加

引言

C++的项目,字符编码是一个大坑,不同平台之间的编码往往不一样,如果不同编码格式用一套字符读取格式读取就会出现乱码。因此,一般都是转化成UTF-8这种平台通用,且支持性很好的编码格式。

字符编码知识

先简单介绍一下Unicode、UTF-8、ANSI之间的概念。

  • Unicode:国际通用编码,使用两个字节表示一个字符,可以表示世界上任何文字和符号。

    Unicode只是一个符号集, 它只规定了符号的二进制代码, 却没有规定这个二进制代码应该如何存储。

  • UTF-8:UTF-8是Unicode实现方式之一。

    可变长度编码,可以表示Unicode标准中的任何一个字符,且编码中第一个字节与ASCII兼容,UTF-8中英文占一个字符,即英文字符编码结果相同
    中文因为需要三个字节,与ASCII码不同,故有乱码

  • ANSI:本地码,与系统的默认编码相关

    中文windows: GBK
    英文windows: ASICII
    繁体windows: BIG5


  • GB2312/BIG5:中国制定的编码规范

    GB2312: 简体中文
    BIG5: 繁体中文
    GBK: 亚洲双字节字符统一的编码格式,兼容所有平台

下面通过C++检测字符编码中提到的在线查字符编码,得到下表

<
字符 GB2312 Unicode UTF-8 GBK
D6D0 00004E2D E4B8AD D6D0
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liferecords

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值