繁体   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