c++ ANSI与utf8互相转换

本文介绍了如何在C++中进行ANSI编码、UTF-8编码以及Unicode之间的转换。利用C++11的wstring_convert和codecvt_utf8类可以实现UTF8与Unicode的转换,通过wcsrtombs和mbsrtowcs函数可以完成Unicode与ANSI的转换。在处理编码转换时需要注意setlocale函数对全局编码的影响。

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

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

Unicode、UTF-8的概念不做过多解释,这里说一下ANSI,我第一次看到这个名词,我看成了ASCII。被Mentor狠批一顿。

可以看出,ANSI和ASCII还是有关系的。ANSI也叫本地码。
我们要做到能在Unicode、UTF-8、ANSI这三种编码格式中自由转换。如下图所示:
在这里插入图片描述
在C++中,要怎么做呢?当然是用标准库的东西啦,C++11对国际化标准做得还是可以的,提供了这些接口,正如图中虚线所示,标准库没有提供UTF-8到ANSI的互相转化接口,但是我们可以自己封转接口,借用这条路(UTF-8 <=> Unicode <=> ANSI)来实现。

因此,接下来就聊聊UTF8 <=> Unicode和Unicode <=> ANSI。

UTF8 <=> Unicode
先看代码:

std::string UnicodeToUTF8(const std::wstring & wstr)
{
   
    std::string ret;
    try {
   
        std::wstring_convert< std::codecvt_utf8<wchar_t> > wcv;
        ret = wcv.to_bytes(wstr);
    } catch (const std::exception & e) {
   
        std::cerr << e.what() << std::endl;
    }
    return ret;
}

std::wstring UTF8ToUnicode(const std::string & str)
{
   
    std::wstring ret;
    try {
   
        std::wstring_convert< std
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值