MALOUDA-PSA 2025-03-17 20:24 采纳率: 85.6%
浏览 6

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

int main() {
    _setmode(_fileno(stdout), _O_U8TEXT); // 设置标准输出为UTF-8
    std::setlocale(LC_ALL, "en_US.utf8");
    std::setlocale(LC_ALL, "en_US.utf8");
    std::wcout.imbue(std::locale("en_US.utf8"));
    std::cout.imbue(std::locale("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;


    std::vector<stkvec> stkvecs123 = {
        {"301598", "黄山谷捷"}
    };

    std::vector<stkvec> stkvecs1 = {
        {"301598", "黄山谷捷"},
        {"603072", "天和磁材"},
        {"603194", "中力股份"},
        {"301458", "N钧崴"},
        {"001356", "N钧崴"},
        {"001395", "N钧崴"},
        {"301601", "N钧崴"},
        {"301602", "N钧崴"}
    };

    std::string text22 = "这里是一些包含股票名称的文本,比如黄山谷捷。";

    std::vector<std::string> matches = findMatchesWithRegex(stkvecs1, text22);

CPP文档编码如果是 带 bom 的 utf8, 编译没问题,如果保存为 utf8 编码保存,则报错:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2143 语法错误: 缺少“;”(在“std::vector<std::string,std::allocatorstd::string>”的前面) test C:\c\c++11\hiredis\test\test.cpp 463

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-03-17 20:24
    关注

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

    C++关于字符编码的问题

    你的问题是关于C++中字符编码的设置问题。从你的代码中可以看到,你使用了 _setmode 函数将标准输出设置为 UTF-8 编码,并使用 std::setlocale 函数将 locale 设置为 "en"。

    这两个函数的作用是:

    • _setmode 函数将文件描述符的编码模式设置为指定的编码模式。在你的代码中,你将标准输出设置为 UTF-8 编码,这意味着输出的字符将使用 UTF-8 编码。
    • std::setlocale 函数将 locale 设置为指定的 locale。在你的代码中,你将 locale 设置为 "en",这意味着将使用英语 locale。

    这两个函数的目的是为了确保输出的字符正确地被解码和编码。例如,如果你输出一个 Unicode 字符,使用 _setmode 函数将其设置为 UTF-8 编码,然后使用 std::setlocale 函数将 locale 设置为 "en",那么输出的字符将正确地被解码为英语。

    需要注意的是,这两个函数的作用是局部的,仅对当前线程有效。如果你需要在多线程环境中使用 UTF-8 编码,可以使用 _setmode 函数在每个线程中设置编码模式。

    总的来说,这两个函数可以帮助你在 C++ 中正确地处理 Unicode 字符和 locale。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月17日