16

在我的 Qt 应用程序中,我的源代码文件被编码为 UTF-8。对于以下代码...

QMessageBox::critical(this, "Nepoznata pogreška", "Dogodila se nepoznata pogreška! Želite li zatvoriti ovaj program ?", QMessageBox::Yes, QMessageBox::No);

...当我显示该消息框时,字符“š”不会显示为“š”,而是显示为奇怪的东西。这是因为 Qt 转换所有 C 字符串,就好像它们是使用 LATIN-1 编码的一样。为了解决这个问题,我一直在使用:

QMessageBox::critical(this, QString::fromUtf8("Nepoznata pogreška"), QString::fromUtf8("Dogodila se nepoznata pogreška! Želite li zatvoriti ovaj program ?"), QMessageBox::Yes, QMessageBox::No);

有没有办法摆脱所有的电话QString::fromUtf8()

4

3 回答 3

29

您是否尝试过使用QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"))

于 2012-01-02T21:55:31.373 回答
3

setCodecForCStrings()已被弃用。换一种方式试试

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

它对我有用。

于 2018-04-19T11:46:19.363 回答
0

关于“Qt5 假定所有源文件都是 UTF-8 编码”的“猜测”:Thiago Macieira 解释了 Qt 开发人员在此处做出的决定。

QT_NO_CAST_FROM_ASCII根据文档,可以禁用该假设。

于 2016-05-30T15:10:16.567 回答