一、QT编码问题,彻底弄懂
1.编码设置
①每个用到中文的文件首行(指定是直接在文件写中文字符串)添加
#pragma execution_character_set(“utf-8”)
指定使用UTF8编译,所有直接在文件中添加的 字符串 都被编译成UTF8格式。
②在main函数中添加
QTextCodec *codec = QTextCodec::codecForName(“utf-8”);
QTextCodec::setCodecForLocale(codec);
指定本地编码为UTF8,否则会默认使用系统指定的,每个系统可能不一样。
QString::fromLocal8Bit 与QTextCodec::setCodecForLocale相对应
- 编码转换
①将GBK或者UTF8转为 Unicode
QString Helper::GetCorrectUnicode(const QByteArray &ba) //将GBK或者UTF8转为 Unicode ,qt支持unicode
{
QTextCodec::ConverterState state;
QTextCodec *codec = QTextCodec::codecForName(“UTF-8”);
QString text = codec->toUnicode(ba.constData(), ba.size(), &state);
if (state.invalidChars > 0)
{
text = QTextCodec::codecForName(“GBK”)->toUnicode(ba);
}
else
{
text = ba;
}
return text;
}
QString Helper::GetCorrectUnicode(const string &str)
{
QByteArray by= QByteArray(str.c_str (),str.length ());
return Helper::GetCorrectUnicode (by);
}
//QString 转GBK的string
②将UTF8转为 GBK 的string,可用于外部gbk编码的库
string Helper::GetCorrectGBK(const QString & str)
{
QTextCodec::ConverterState state;
QTextCodec *codec = QTextCodec::codecForName(“GBK”);
QByteArray ba = codec->fromUnicode(str);
return string(ba.constData(), ba.length());
}