簡體   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