与平假名的std::wstring到QString的转换
std::wstring to QString conversion with Hiragana
我试图将包含平假名的文本从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码点E3 201A
之前将每个字节读取为单个Windows-1252字符,其计算结果为'ã, ' (81
要么被VS忽略,因为它在Windows-1252中保留,或者不被qt打印,如果VS恰好将其转换为各自的C1控制字符)。
直接版本有效,因为编译器不执行任何转换,并将字符串保留为E3 81 82
。
要解决您的问题,您需要通知VS文件是UTF-8,根据其他帖子的一种方法是确保文件具有UTF-8 BOM。
唯一可移植的修复方法是使用转义序列:
L"Some Hiragana: u3042 u3044 u3046 u3048 u304A"
相关文章:
- 将 hh:mm:ss.zzz 时间 QString 转换为毫秒的单行函数?
- 如何将包含指数的 QString 转换为C++中的双倍?
- 删除unicode def后,无法将QString转换为TCHAR
- 在Qt中将QString转换为ASCII值,反之亦然
- 如何在Windows上将Qt QString转换为LPCTSTR
- 将 QString 转换为 QJsonArray
- QByteArray 和 QString 转换的问题
- q致命参数:将 QString 转换为常量字符* 会导致警告"format string is not a string literal"
- 将QString转换为uintptr_t,qt / c
- 无法将 QString 转换为 Const Char*
- 处理字符到QString转换中的ASCII字符
- 将QString转换为QString的指针
- 使用 QList 将 Qstring 转换为双倍
- 将 QString 转换为 uint16*
- 将 QString 转换为无符号短整型
- 将十六进制 QString 转换为 UTF-8 QString
- 如何在 Visual Studio 2013 中将 Qt5 中的 QString 转换为 LPCSTR
- QString::compare() vs 将 QString 转换为数字然后进行比较
- 正在将QString转换为std::string
- 如何将QString转换为特定格式的QDate