簡體   English   中英

Qt utf8編碼在Windows上失敗,但在Linux上運行良好

[英]Qt utf8 encoding fails on windows but works good on linux

在項目中,我們有一個代碼:

return QString("%1\u00B0%2' %3").
    arg(std::abs(data.longitude) / 60).
    arg(std::abs(data.longitude) % 60).
    arg(data.longitude > 0 ? 'E' : 'W');

此字符串對象打印在QTableView的單元格中。 問題在於,它僅在linux機器上正確打印度數符號,但在Windows上卻打印正方形。 如何解決?

Qt 4.8,Windows XP。 Linux(任何發行版)。

UPD:

除了QString::fromLatin1()我們還嘗試了其他任何方法:在Windows上,現在它可以正確打印度數,而在Linux上,我們可以額外顯示符號:

因此,對於這一刻,我們有一個類似的“解決方案”:

return QString("%1%2%3' %4").
    arg(std::abs(data.longitude) / 60).
#if defined(Q_OS_WIN)
    arg(QString::fromLatin1("\u00B0")).
#else
    arg("\u00B0").
#endif
    arg(std::abs(data.longitude) % 60).
    arg(data.longitude > 0 ? 'E' : 'W');

這非常丑陋,但確實可行。 我感謝任何其他修復。

Unicode \\ u00b0(unix上的win 32上為16bit)代表latin1的有效0xb0或多或少是一個快樂的巧合。 我會從wchar_t表示中推斷出String

return QString::fromWString(L"%1\u00B0%2' %3").
    arg(std::abs(data.longitude) / 60).
    arg(std::abs(data.longitude) % 60).
    arg(data.longitude > 0 ? 'E' : 'W');

這應該在兩個平台上都可以使用,並讓您可以自由編碼在latin1中沒有8位編碼的字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM