QT中文乱码问题求助

linux_6 2011-12-02 01:31:30
我的系统是linux的,我在main函数中设置字符编码格式为gb2312,

QTextCodec *codec = QTextCodec::codecForName("gb2312");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);


我在项目中定义了一个 QString curPath = QCoreApplication::applicationDirPath ();或许当前程序的运行路径(中文路径)。
调用QDebug()<<curPath。打印的这个curPath为乱码,如果我这样用:
Label lb = new Label();
lb->setText(curPath);

这时是正常的,请大侠们帮忙看看,这个问题如何解决,万分感激。
...全文
223 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingqing_benniu 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dbzhang800 的回复:]
引用 5 楼 qingqing_benniu 的回复:

引用 4 楼 xiachm 的回复:
引用 3 楼 qingqing_benniu 的回复:

//第一种
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));// 1
QTextCodec::setCodecForLocale(QTextCo……
[/Quote]

我一直都用的第二种的 从没出错过 怎么到你那边就错的离谱呢.. 自己尝试下再说话吧..
SunFrank1987 2011-12-05
  • 打赏
  • 举报
回复

QStringList libPaths;

#if defined( Q_OS_WIN32 )
libPaths << app.applicationDirPath() + "/plugins";
#elif defined( Q_OS_MACX )
libPaths << app.applicationDirPath() + "/../PlugIns";
#endif
QApplication::setLibraryPaths(libPaths);
//////////////////////////////////////////////////////////////////////////
QTextCodec* codec = QTextCodec::codecForName( "UTF-8" );
// CString 是让QString跟Char* 和QByteArray转换的
// 那些QNetworkReply读取的数据都是UTF-8的,所以这里设置成UTF-8
QTextCodec::setCodecForCStrings( codec );
#ifdef Q_OS_WIN32
codec = QTextCodec::codecForLocale();
#else
codec = QTextCodec::codecForName( "GB2312" );
#endif
QTextCodec::setCodecForTr( codec );

dbzhang800 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ticmy 的回复:]

还有这种:

C/C++ code

QTextCodec *codec = QTextCodec::codecForName("System"); //获取系统编码
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec……
[/Quote]
这个和前面的第二个完全一样。
xiachm 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qingqing_benniu 的回复:]

引用 4 楼 xiachm 的回复:
引用 3 楼 qingqing_benniu 的回复:

//第一种
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));// 1
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));/……
[/Quote]

你在main函数里就写一句qDebug() << "测试";

然后用你第二种方法,在Linux和Windows下分别做一次测试就知道了。
龙四 2011-12-05
  • 打赏
  • 举报
回复
还有这种:


QTextCodec *codec = QTextCodec::codecForName("System"); //获取系统编码
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
dbzhang800 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qingqing_benniu 的回复:]

引用 4 楼 xiachm 的回复:
引用 3 楼 qingqing_benniu 的回复:

//第一种
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));// 1
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));/……
[/Quote]
呵呵,第二种比第一种错的还厉害 ^_^

题外:
其实,只要这3个 setCodecForXXX 一块用,用法几乎总是错的!(至少我还没见过,也没见网友给出过需要这3个一块使用的场景)
qingqing_benniu 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiachm 的回复:]
引用 3 楼 qingqing_benniu 的回复:

//第一种
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));// 1
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));// 2
QTextCodec::setC……
[/Quote]
我试啦下第一种是有点问题 呵呵。。其实我没用过第一种 只是觉得应该行的通的
呐你试下第二种方法吧 我一般都是用第二种的 没有出错过的 ...
xiachm 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qingqing_benniu 的回复:]

//第一种
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));// 1
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));// 2
QTextCodec::setCodecForTr(QTextCodec::codecF……
[/Quote]
似乎有点问题

setCodecForCStrings中的编码应该与你书写这个程序的字符编码一致,你让它跟着系统走是不行的。
qingqing_benniu 2011-12-02
  • 打赏
  • 举报
回复
//第一种
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));// 1
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));// 2
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));// 3 如上三句是关键语句

//第二种(本人感觉这种最好用 直接放在main方法中就OK啦)
QTextCodec *codec = QTextCodec::codecForLocale(); //文本为GB2312编码
QTextCodec::setCodecForLocale(codec); //设置本地编码
QTextCodec::setCodecForCStrings(codec); //设置字符串编码
QTextCodec::setCodecForTr(codec); //设置使用tr内的编码

这俩种方法都是直接放在main里面就行啦 打印的时候你可以qDebug()<<tr("想要输出的内容");这样写
xiachm 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiachm 的回复:]

你在Linux下,setCodecForCStrings应该是UTF-8吧
[/Quote]

错了,应该是setCodecForLocale设为UTF-8
xiachm 2011-12-02
  • 打赏
  • 举报
回复
你在Linux下,setCodecForCStrings应该是UTF-8吧

16,225

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧