Qt utf8编码在Windows上失败但在linux上运行良好

时间:2015-03-13 12:54:18

标签: c++ linux qt encoding

在项目中我们有一个代码:

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');

这很难看,但确实有效。我感谢任何其他修复。

1 个答案:

答案 0 :(得分:1)

unicode \ u00b0(unix上的16位胜利32)代表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位编码的字符。