MALOUDA-PSA 2025-03-17 19:46 采纳率: 85.6%
浏览 5

c++关于字符编码的问题3


   std::setlocale(LC_ALL, "en_US.utf8");
   std::string utf8str = "黄山谷捷";
   // 将UTF-8编码的字符串转换为宽字符类型
   std::wstring wstr = utf8_to_wstring(utf8str);

   // 输出转换后的宽字符串以验证结果
   std::wcout << L"Converted string: " << wstr << std::endl;
   std::cout << "Converted string: " << utf8str << std::endl;

vs2019 环境, test.cpp 文件用记事本打开发现是 带有 bom 的 utf8 格式, 现在上面在控制台输出,第一个是6个问号,第二个输出什么都没有只有前面的 Converted string:


Converted string: ??????
Converted string:
  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-03-17 19:46
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解答

    你遇到了C++中字符编码的问题,具体来说是将UTF-8编码的字符串转换为宽字符类。

    解决方案:

    #include <locale>
    #include <codecvt>
    
    int main() {
        std::setlocale(LC_ALL, "en_US.utf8");
        std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
        std::string utf8str = "黄山谷捷";
        std::wstring wideStr = converter.from_bytes(utf8str);
        return 0;
    }
    

    在上面的代码中,我们使用std::wstring_convert类来将UTF-8编码的字符串转换为宽字符类。std::codecvt_utf8_utf16是UTF-8到UTF-16的编码转换器,我们将其作为std::wstring_convert类的模板参数。

    main函数中,我们首先设置了 locales为en_US.utf8,然后使用std::wstring_convert类将UTF-8编码的字符串utf8str转换为宽字符类wideStr

    评论

报告相同问题?

问题事件

  • 创建了问题 3月17日