我正在尝试存储一个带有特殊字符的字符串:
qDebug() << "ÑABCgÓ";
输出结果:(这里我甚至无法输入正确的输出,一些垃圾字符在“à & Ô后面丢失了)
我怀疑是UTF-8 / Latin1 / ASCII编码问题,但找不到设置将其输出到控制台 / 文件的方法。我在代码中写的是:“ÑABCgÓ”。
(Qt: 4.8.5 / Ubuntu 12.04 / C++98)
我正在尝试存储一个带有特殊字符的字符串:
qDebug() << "ÑABCgÓ";
输出结果:(这里我甚至无法输入正确的输出,一些垃圾字符在“à & Ô后面丢失了)
我怀疑是UTF-8 / Latin1 / ASCII编码问题,但找不到设置将其输出到控制台 / 文件的方法。我在代码中写的是:“ÑABCgÓ”。
(Qt: 4.8.5 / Ubuntu 12.04 / C++98)
QString QString::fromUtf8(const char * str, int size = -1) [static]
,如下面的示例代码所示。这是QString存在的主要原因之一。#include <QString>
#include <QDebug>
int main()
{
qDebug() << QString::fromUtf8("ÑABCgÓ");
return 0;
}
g++ -fPIC -I/usr/include/qt -I/usr/include/qt/QtCore -lQt5Core main1000.cpp && ./a.out
"ÑABCgÓ"
话虽如此,根据你的地区,仅使用qDebug() << "ÑABCgÓ";
也可能有效,但建议通过显式要求UTF-8处理来确保。
#define QStringLiteral(x) QString::fromUtf8(x)
,这将是最便携的建议,这正是我在我的代码中所做的。 - Kuba hasn't forgotten Monica#define QStringLiteral(str) QString::fromUtf8("" str "", sizeof(str) - 1)
正是我们想要的:通过切换编译器,代码就能获得效率提升,太棒了! - Kuba hasn't forgotten Monica试试这个:
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForCStrings(codec);
qDebug() << "ÑABCgÓ";