• 7531阅读
  • 7回复

[提问]qt读取windows中文路径乱码 [复制链接]

上一主题 下一主题
离线浪迹江湖
 

只看楼主 倒序阅读 楼主  发表于: 2011-12-26
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
大家好,在windows上,我用QDir::currentPath()读取的中文路径包含乱码
我在main.cpp里这样写的:
  
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);

QString dir_before = QDir::currentPath();
qDebug() << dir_before;   //乱码
QString dir = QString::fromUtf8(dir_before.toUtf8().constData());
qDebug() << dir;   //乱码
或者:
QString dir = QString::fromLocal8Bit(dir_before.toLocal8Bit.constData());
qDebug() << dir;   //也是乱码

字体plugins也加了,请问该怎么做,我不想把程序默认编码设成GB2312等,谢谢
离线dbzhang800

只看该作者 1楼 发表于: 2011-12-26
不妨先去看看Manual,了解下 setCodecFor*** 分别是做什么的。

题外:
网络上这部分内容以讹传讹的东西过多,最好直接忽视
离线浪迹江湖

只看该作者 2楼 发表于: 2011-12-26
引用第1楼dbzhang800于2011-12-26 17:04发表的  :
不妨先去看看Manual,了解下 setCodecFor*** 分别是做什么的。
题外:
网络上这部分内容以讹传讹的东西过多,最好直接忽视



去掉了QTextCodec::setCodecForLocale(codec);,OK了
离线roywillow

只看该作者 3楼 发表于: 2011-12-26
我个人的理解是
除非你清楚你要进行什么编码之间的转换,否则就别用codec相关的东西
比如说,你在中文系统中打开一个shift-jis编码的文本文件会乱码,这个时候你可以明确的使用指定的codec来进行转换

至于你遇到的问题,我想应该是你的locale的codec并不是utf-8所致的吧
另外最好明确一下另外两个setCodec究竟是为了什么目的
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线沙漠之源

只看该作者 4楼 发表于: 2011-12-26
嗯,以前也对QTextCodec::setCodecForLocale(codec);  TextCodec::setCodecForCStrings(codec);QTextCodec::setCodecForTr(codec);  这三个函数似懂非懂的。这下可还真需要好好研究一下了。搞懂搞清楚才是王道啊。

离线ninsun

只看该作者 5楼 发表于: 2011-12-27
windows的中文编码可是GB2312/GBK/GB18030系列的.
linux下才是UTF8的...不过当然可以设置成GB系列的....
离线淳于半邪

只看该作者 6楼 发表于: 2011-12-27
用fromLocal8Bit("输入的任何字")也行;main函数里什么都不要定义,偶这么试过可以。
离线淳于半邪

只看该作者 7楼 发表于: 2011-12-27
前面加上QString::fromLocal8Bit("输入的任何字")
快速回复
限100 字节
 
上一个 下一个