gpt4 book ai didi

c++ - 使用平假名将 std::wstring 转换为 QString

转载 作者:可可西里 更新时间:2023-11-01 09:28:59 26 4
gpt4 key购买 nike

我正在尝试将包含平假名的文本从 wstring 转换为 QString,以便它可以用于标签的文本属性。但是,我的代码无法正常工作,我不确定这是为什么。

下面的转换方式明显告诉我我做错了:

std::wstring myWString = L"Some Hiragana: あ い う え お";
ui->label->setText(QString::fromStdWString(myWString));

输出: 一些平假名:゠ㄠㆠ㈠ãŠ

如果我直接把它们放在字符串中,我可以在标签上打印平假名:

ui->label->setText("Some Hiragana: あ い う え お");

输出:一些平假名:あいうえお

这意味着我可以通过简单地使用 std::string 而不是 std::wstring 来避免这个问题,但我想知道为什么会这样。

最佳答案

VS 将文件解释为 Windows-1252 而不是 UTF-8。

例如,UTF-8 中的 'あ' 是 E3 81 82,但编译器在将每个字节转换为相应的 UTF-16 代码点之前将其读取为单个 Windows-1252 字符E3 201A,结果为 'ã‚'(81 被 VS 忽略,因为它在 Windows-1252 中保留,或者如果 VS 碰巧不被 qt 打印将其转换为相应的 C1 控制字符)。

直接版本有效,因为编译器不执行任何转换并将字符串保留为 E3 81 82

要解决您的问题,您需要通知 VS 该文件是 UTF-8,根据其他帖子,一种方法是确保文件具有 UTF-8 BOM。

解决此问题的唯一可移植方法是改用转义序列:

L"Some Hiragana: \u3042 \u3044 \u3046 \u3048 \u304A"

关于c++ - 使用平假名将 std::wstring 转换为 QString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23821423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com