Qt中解决中文乱码的方法----编码
2010-03-16 10:47
543 查看
如只是提供给本地用户使用,无需国际化
先调用下面两个函数之一
QTextCodec *textc=QTextCodec::codecForName(”gbk”);
QTextCodec *textc=QTextCodec::codecForName(”utf8″);
然后调用下面3个函数之一
QTextCodec::setCodecForCStrings(textc);
QTextCodec::setCodecForTr(textc);
QTextCodec::setCodecForLocale(textc);
至于调用哪一个是不知道的,只好挨着试,反正组合也不多。问题是解决了。但下次还是这么试。
下面我们来看看这几个函数都作用在什么地方。
1. setCodecForCStrings(textc)
这个函数主要用在用字符常量或者QByteArray构造QString对象时使用的默认编码方式。比如下面一个例子
23 int main(int argc,char *argv[]){
24 QApplication app(argc,argv);
25
26 QTextCodec *tc=QTextCodec::codecForName(”utf8″);
27 QTextCodec::setCodecForCStrings(tc);
28 QString str(”宁愿看见两个恶魔在拔河,也不愿看见一只天使在跳舞。”);
29 QPushButton ww(str);
30 ww.show();
31
32 app.exec();
33 }
如果把26,27行的地方注释掉,那么我们在QPushButton上看到的将是一堆乱码。因为在默认情况下QString把构造函数的字符串参数当成标准拉丁字符,很显然是会出现乱码的。如果是在Linux下的话你在编辑器里输入的时候,默认文本格式是”utf8″,如果你是在windows下做开发那么26行的地方很可能要改成”gbk”了。
2. setCodecForTr(textc)
这个函数的作用是设置传给tr函数时的默认字串编码
23 int main(int argc,char *argv[]){
24 QApplication app(argc,argv);
25
26 QTextCodec *tc=QTextCodec::codecForName(”utf8″);
27 QTextCodec::setCodecForCStrings(tc);
28 QString str(QObject::tr(”宁愿看见两个恶魔在拔河,也不愿看见一只天使在跳舞。”));
29 QPushButton ww(str);
30 ww.show();
31
32 app.exec();
33 }
同样一个例子,我在28行的地方加了tr之后,运行的结果又不能正常显示中文了。需要将27行的函数改成setCodecForTr就可以了。
3. QTextCodec::setCodecForLocale(textc)
这个函数主要用于设置和对本地文件系统读写时候的默认编码格式。比如通过流读取一个文件时内容时的编码格式。或者通过qDebug()输出打印信息时的编码。
7 int main(int argc,char *argv[]){
8 QTextCodec *tc=QTextCodec::codecForName(”utf8″);
9 QTextCodec::setCodecForCStrings(tc);
10 QString str(”宁愿看见两个恶魔在拔河,也不愿看见一只天使在跳舞。”);
11
12 QTextCodec *tl=QTextCodec::codecForName(”utf8″);
13 QTextCodec::setCodecForLocale(tl);
14 qDebug()<<str;
15 }
你也可以试试把第12行去掉或者编码改成”gbk”,就会大概明白setCodecForLocale的作用了。
--------------------------------------------------------------------------------------------------------------------
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));
从UTF8编码到GB编码的字符串转换方法:
QString Utf8_To_GB(QString strText)
{
return QString::fromUtf8(strText.toLocal8Bit().data());
}
至于从GB到UTF8,那大家就经常用了:
QString GB_To_Utf8(char *strText)
{
return QString::fromLocal8Bit(strText);
}
先调用下面两个函数之一
QTextCodec *textc=QTextCodec::codecForName(”gbk”);
QTextCodec *textc=QTextCodec::codecForName(”utf8″);
然后调用下面3个函数之一
QTextCodec::setCodecForCStrings(textc);
QTextCodec::setCodecForTr(textc);
QTextCodec::setCodecForLocale(textc);
至于调用哪一个是不知道的,只好挨着试,反正组合也不多。问题是解决了。但下次还是这么试。
下面我们来看看这几个函数都作用在什么地方。
1. setCodecForCStrings(textc)
这个函数主要用在用字符常量或者QByteArray构造QString对象时使用的默认编码方式。比如下面一个例子
23 int main(int argc,char *argv[]){
24 QApplication app(argc,argv);
25
26 QTextCodec *tc=QTextCodec::codecForName(”utf8″);
27 QTextCodec::setCodecForCStrings(tc);
28 QString str(”宁愿看见两个恶魔在拔河,也不愿看见一只天使在跳舞。”);
29 QPushButton ww(str);
30 ww.show();
31
32 app.exec();
33 }
如果把26,27行的地方注释掉,那么我们在QPushButton上看到的将是一堆乱码。因为在默认情况下QString把构造函数的字符串参数当成标准拉丁字符,很显然是会出现乱码的。如果是在Linux下的话你在编辑器里输入的时候,默认文本格式是”utf8″,如果你是在windows下做开发那么26行的地方很可能要改成”gbk”了。
2. setCodecForTr(textc)
这个函数的作用是设置传给tr函数时的默认字串编码
23 int main(int argc,char *argv[]){
24 QApplication app(argc,argv);
25
26 QTextCodec *tc=QTextCodec::codecForName(”utf8″);
27 QTextCodec::setCodecForCStrings(tc);
28 QString str(QObject::tr(”宁愿看见两个恶魔在拔河,也不愿看见一只天使在跳舞。”));
29 QPushButton ww(str);
30 ww.show();
31
32 app.exec();
33 }
同样一个例子,我在28行的地方加了tr之后,运行的结果又不能正常显示中文了。需要将27行的函数改成setCodecForTr就可以了。
3. QTextCodec::setCodecForLocale(textc)
这个函数主要用于设置和对本地文件系统读写时候的默认编码格式。比如通过流读取一个文件时内容时的编码格式。或者通过qDebug()输出打印信息时的编码。
7 int main(int argc,char *argv[]){
8 QTextCodec *tc=QTextCodec::codecForName(”utf8″);
9 QTextCodec::setCodecForCStrings(tc);
10 QString str(”宁愿看见两个恶魔在拔河,也不愿看见一只天使在跳舞。”);
11
12 QTextCodec *tl=QTextCodec::codecForName(”utf8″);
13 QTextCodec::setCodecForLocale(tl);
14 qDebug()<<str;
15 }
你也可以试试把第12行去掉或者编码改成”gbk”,就会大概明白setCodecForLocale的作用了。
--------------------------------------------------------------------------------------------------------------------
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));
从UTF8编码到GB编码的字符串转换方法:
QString Utf8_To_GB(QString strText)
{
return QString::fromUtf8(strText.toLocal8Bit().data());
}
至于从GB到UTF8,那大家就经常用了:
QString GB_To_Utf8(char *strText)
{
return QString::fromLocal8Bit(strText);
}
相关文章推荐
- QT学习——qt creator修改程序编码(解决中文乱码问题)的方法
- Qt中解决中文乱码的方法----编码
- Qt中解决中文乱码的方法----编码
- Qt中QFtp获取带有中文的文件名称出现乱码的解决方法(执行操作前就转换编码)
- MyEclipse编码设置,中文乱码解决方法,UTF-8,GBK
- Linux下QT控件中文乱码解决方法
- MyEclipse编码设置,中文乱码解决方法
- 解决utf-8编码下 echo 弹出javascript alert中文乱码解决方法
- Qt中QFtp获取带有中文的文件名称出现乱码的解决方法
- QT中使用MySql中文乱码解决方法(windows下)
- MyEclipse编码设置,中文乱码解决方法,UTF-8,GBK
- 关于RCP项目使用UTF-8编码,导出后中文乱码的解决方法。
- MyEclipse编码设置,中文乱码解决方法,UTF-8,GBK
- 中文乱码--MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总
- 某些开发版中的Qt Designer菜单等中文显示为乱码问题解决方法初探
- Qt中QFtp和QURL获取带有中文的文件名称出现乱码的解决方法
- Qt中提示“常量中有换行符“及中文乱码的解决方法
- MyEclipse编码设置,中文乱码解决方法,UTF-8,GBK
- Qt 5.x中出现中文乱码的解决方法
- MyEclipse编码设置,中文乱码解决方法,UTF-8,GBK