我们刚刚从QT4切换到QT5,我们仍然需要考虑在某些地方使用QT4的情况。我正在尝试更正框中显示为问号的符号。
我尝试使用QString并使用fromUTF8()函数,但未成功。
我正在使用的代码部分在其他地方都可以使用。
这是使用C ++。
#include <QtCore/QtGlobal>
#if QT_VERSION >= 0x050000
const ColumnType ColumnType::OtherNamespace = "ColumnTitle (""\xc2\xb5""s)";
#else
const ColumnType ColumnType::OtherNamespace = "ColumnTitle (""\xb5""s)";
#endif
我希望得到一个mu(μ),但是我在一个盒子里有一个问号。
我在做什么错? QT版本检查宏可在其他地方使用。
答案 0 :(得分:1)
请改用QChar()
Unicode构造函数。这是一个带有mu
符号的示例:
QString str = QString("Here comes the mu: ") + QChar(0xb5);
答案 1 :(得分:1)
好吧,我发现了this
我也发现这可行:
QString teststr2 = "\u00b5";
这不是:
QString teststr1 = "\xb5";
我的猜测是,这是因为它是字符串文字,并且支持编译器依赖的非拉丁/ ASCII字符。以及其他字符集也已经看到了各种各样的这些问题。
编辑:
为此,我使用了QString的“ from”功能。我发现了一件令人惊讶的事情。如果我使用fromLatin1来转换“ \ xb5”,那么它将起作用。如果我使用fromUtf8,它将失败。我不确定该怎么做。我知道在Linux系统上,源代码的默认编码为Utf8,因为这是系统编码。这是Qt Creator用于编码的默认系统编码,除非您进行更改。
QString teststr1 = "\xb5";
QString teststr2 = "\u00b5";
QString teststr3 = QString().fromLatin1("\xb5");
QString teststr4 = QString().fromUtf8("\xb5");
qInfo() << teststr1;
qInfo() << teststr2;
qInfo() << teststr3;
qInfo() << teststr4;
此代码输出:
"�"
"µ"
"µ"
"�"
再次编辑:
'\ x'转义序列不适用于Unicode。用于以十六进制指定任意字节值。它是否会转换为unicode字符,取决于编译器的字符编码和/或馈给编译器的文件。因此,将来使用'\ u'将有助于防止字符编码问题。如果问题不是字体问题,则很可能是您的代码如何处理结果字符串的问题。我认为您在这个问题上遇到了很多问题。由于缺少代码示例,因此我们无法为您解决其中的一些问题。我的猜测是,当您在Qt4下编译该字符串时,该字符串被视为latin1或类似的编码。现在在Qt5中,它将字符串视为Unicode,并且不再适当地将\ xb5视为Unicode字符。
编辑更多:
Latin1编码将微符号定义为十六进制B5。这就是为什么它以前有效但现在失败了。
答案 2 :(得分:0)
我的解决方案原来是我编写的代码替换了μ,并在一个单独的文件中引起了问题,该文件用编码替换了μ。所以我将宏插入到该文件中,并且它们已修复。感谢所有提出解决方案并尝试提供有限数据帮助的人。