QML/C++问题中的Unicode

Unicode in QML/C++ issue

本文关键字:Unicode 问题 C++ QML      更新时间:2023-10-16

在QML中,我有一个TextArea。当我将此TextArea的文本属性设置为"ÆæÅ"时,程序运行时会显示"\198\æå"。

我还通过一些函数获取文本,这些函数我想在同一个TextArea中显示,但随后"ÆÅ"显示为"??"。

字符串来自这个C++函数:

QString Tts::morseToChar(QString morse)
{
    if(morse == ".-")               return "A";
    else if (morse == "-...")       return "B";
    ...
    ...
    else if (morse == ".-.-")       return "Æ";
    else if (morse == "---.")       return "Ø";
    else if (morse == ".--.-")      return "Å";
}

返回字符串被添加到QML字符串:

property string ttsChar: ""
ttsChar += ttsSpeak.morseToChar(morse)
_ttsTextArea.text += ttsChar

所有文件都保存为UTF-8。

我错过了什么转换来让它发挥作用?

尝试返回通用字符名,而不是utf-8表示。

QString Tts::morseToChar(QString morse)
{
    if(morse == ".-")               return "A";
    else if (morse == "-...")       return "B";
    ...
    ...
    else if (morse == ".-.-")       return u8"u00C6";
    else if (morse == "---.")       return u8"u00D8";
    else if (morse == ".--.-")      return u8"u00C5";
}

您可以在这里搜索通用字符名,这是找到Æ(\00C6)、PXS(\00D8)和Å(\0OC5)的名称的地方。

有关为什么在c++源文件中不允许使用utf-8表示形式的更多信息,请参阅此答案。

char *中QStrings的默认构造函数使用fromAscii()函数。

很可能你的字符串实际上是用UTF-8编码的,所以有两件事可以尝试:-

a:返回宽字符数:

return L"Æ";

b: 或者,从UTF8 显式转换

 return QString::fromUtf8("Æ");