繁体   English   中英

QT无法识别UTF-8编码,可在其他地方使用

[英]QT Not Recognizing UTF-8 Encoding, works in every other place

我们只是从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版本检查的宏可在所有其他地方使用。

请改用QChar() Unicode构造函数。 这是一个带有mu符号的示例:

QString str = QString("Here comes the mu: ") + QChar(0xb5);

我发现了这个

我也发现这个作品:

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编码

Latin1编码将微符号定义为十六进制B5。 这就是为什么它以前起作用但现在失败了的原因。

我的解决方案原来是我编写的代码替换了μ,并在一个单独的文件中引起了问题,该文件用编码替换了μ。 因此,我将宏插入到该文件中,并对其进行了修复。 感谢所有提出解决方案并尝试提供有限数据帮助的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM