• 8070阅读
  • 6回复

[提问]文件名中文编码问题(已解决) [复制链接]

上一主题 下一主题
离线rojer
 
只看楼主 倒序阅读 楼主  发表于: 2010-08-05
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
关键词: 汉字编码
我的程序是这样的,一个主程序(QtCreator创建,工程中的所有文件使用UTF-8编码),调用QFileDialog获取文件路径。

另一个动态库工程(QtCreator创建,工程中的编码使用GBK编码),动态库中的一个类提供ReadFile(const char* strpath)接口。

动态库中定义:
void DLLClass::ReadFile(const char* strpath)
{
    QString strp;
    strp.fromLatin1(strpath);          //错误出现了,这里strp为空,不知道为什么    
}


现在调用方式如下:
QString strpath = QFileDialog::getOpenFileName(this,tr("选择文件"),QDir::currentPath());
DLLClass sl;
sl.ReadFile(strpath.toLatin1().constData();          //这里的转换应该是有效的

多谢赐教!!!

[ 此帖被rojer在2010-08-06 10:13重新编辑 ]
离线dbzhang800

只看该作者 1楼 发表于: 2010-08-05

toLatin1() 显然用的不对,怎么也要用个能处理中文的编码吧,比如 utf8 或 gbk
离线kinzess

只看该作者 2楼 发表于: 2010-08-05
toLocal8Bit
离线watera
只看该作者 3楼 发表于: 2010-08-05
最好用utf8,通用性强.现在的操作系统基本都用utf编码文件名,包括win
离线rojer
只看该作者 4楼 发表于: 2010-08-06
呵呵,仔细测试了下,楼上几位说的都是对的,测试结果:

使用toLocal8bit,toASCII,toUTF8都是可以的。

toLatin1不行。多谢了。
[ 此帖被rojer在2010-08-06 10:06重新编辑 ]
离线dbzhang800

只看该作者 5楼 发表于: 2010-08-06
引用第4楼rojer于2010-08-06 08:56发表的  :
to  dbzhang800:
应该不是这个问题,因为我在主程序中测试过,同一个文件名,toLatin和fromLatin是可逆的,也就是说转换是没有任何问题的。
.......


即使你测试通过,仍然无法证明是正确的。因为官方明确说明
Returns a Latin-1 representation of the string as a QByteArray. The returned byte array isundefined if the string contains non-Latin1 characters.


而且据我所知,至少windows和linux下这种测试都是无法通过的

QStringa=QString::fromLocal8Bit("Unicode中文测试:通过Latin1进行转换")
qDebug()<<a;
qDebug()<<QString::fromLatin1(a.toLatin1());

另外,我觉得你对可能编码缺少基本的理解,很可能你的测试程序本身就是错的,比如,在未设定指定编码的情况下直接用 QString a = "我是中文";
[/pre]
离线kinzess

只看该作者 6楼 发表于: 2010-08-07
Latin-1 gbk gb18030 gb2312 utf-8 utf-16 unicode ascii 你能区分这几个,就基本不会再遇到乱码问题了.
快速回复
限100 字节
 
上一个 下一个