此方法并一定适用于所有乱码问题,只是自己在做项目调研的测试用例时发现可以解决自己的问题。
测试用例环境Qt Creator3.1.2 + Qt4.8.7 MSVC2013 64
之前在做项目调研时,发现测试用例一直会出现中文乱码问题,在网上也搜到了一些解决用例,都是一些关于字符集编码转换的操作,一般都是改为gbk、GB2312、utf-8。一一尝试后返现并没有解决我的中文乱码问题。
尝试改为utf-8操作的事例:
代码
#include "widget.h"
#include <QApplication>
#include <QTextCodec>
int main(int argc, char *argv[])
{
// 转utf-8
QTextCodec*codec = QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
运行结果如下:
直到看到了一篇文章说让函数自己会指向最适合此区域的编解码器的指针。
代码如下:
#include "widget.h"
#include <QApplication>
#include <QTextCodec>
int main(int argc, char *argv[])
{
// 转utf-8
//QTextCodec*codec = QTextCodec::codecForName("utf-8");
//QTextCodec::setCodecForLocale(codec);
//QTextCodec::setCodecForCStrings(codec);
//QTextCodec::setCodecForTr(codec);
//QTextCodec : 这个类提供文本编码之间的转换
//QTextCodec::codecForLocale()->name() : 这个成员函数返回最适合此语言环境的编解码器的指针
//QTextCodec::codecForName() : 这个成员函数返回与参数指定的名称最匹配的编解码器指针。如果没有匹配的则返回0
//QTextCodec::setCodecForLocale / QTextCodec::setCodecForTr / QTextCodec::setCodecForCStrings : 这个成员函数设置参数指定的编解码器
QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
运行结果如下: