• 16915阅读
  • 7回复

[提问]QString中含有中文字符如何提取字符串? [复制链接]

上一主题 下一主题
离线omss
 

只看楼主 倒序阅读 楼主  发表于: 2011-04-18
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
我的程序中用QFiledialog::getOpenFileName获取文件名,再用fopen打开。
这个调用返回的filename是QString类型,以前我都是用filename.toAscii().data()来得到char*的字符串,
文件名中不含中文字符时,这样做是可以的,
但是如果含有中文字符,例如“E:/新建文件夹/test.dat”, 这样转换得到的是E:/????????/test.dat

请教,如何从这样的Qstring中得到含中文的字符串?
离线wxj120bw

只看该作者 1楼 发表于: 2011-04-19
引用楼主omss于2011-04-18 22:18发表的 QString中含有中文字符如何提取字符串? :
我的程序中用QFiledialog::getOpenFileName获取文件名,再用fopen打开。
这个调用返回的filename是QString类型,以前我都是用filename.toAscii().data()来得到char*的字符串,
文件名中不含中文字符时,这样做是可以的,
但是如果含有中文字符,例如“E:/新建文件夹/test.dat”, 这样转换得到的是E:/????????/test.dat
.......

尝试下QTextCodec进行转码
离线radium_sql

只看该作者 2楼 发表于: 2011-04-19
可以看看我的这个帖子,应该就是中文转换的问题QString的中文初步
QT什么时候替代MFC?
离线roywillow

只看该作者 3楼 发表于: 2011-04-19
为什么不用QFile呢
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线dbzhang800

只看该作者 4楼 发表于: 2011-04-19
引用楼主omss于2011-04-18 22:18发表的 QString中含有中文字符如何提取字符串? :
我的程序中用QFiledialog::getOpenFileName获取文件名,再用fopen打开。
这个调用返回的filename是QString类型,以前我都是用filename.toAscii().data()来得到char*的字符串,
文件名中不含中文字符时,这样做是可以的,
但是如果含有中文字符,例如“E:/新建文件夹/test.dat”, 这样转换得到的是E:/????????/test.dat
.......

建议:写个尽可能小的完整的例子,来重现你的问题。

题外:
在Qt中的中文问题,编码概念清楚了,还算是比较简单的。怕就怕概念不清,找不到问题出在哪儿。

离线omss

只看该作者 5楼 发表于: 2011-04-19
多谢楼上各位回复!
没用Qfile是因为底层的io函数都是从别的程序搬过来的,用的fopen之类的。

最后试验成功,用filename.toLocal8bit().data()来得到字符串,中文就正常了
离线quser
只看该作者 6楼 发表于: 2011-04-20
回 2楼(radium_sql) 的帖子
帖子写的不错!赞一个,哦 原来默认情况下给QString 对象赋值 先把字符串转换成latin编码的方式啊,
如果我们想使用QString对象的时候,只要在复制前设置Codec就可以了,首先我们先获得"GB18030"的编码器指针 QTextCodec *  myCodec=QTextCodec::CodecForName("GB18030");然后指定mycodec的作用域   QTextCodec::SetCodecForTr(myCodec);
这样 tr("string")   string使用的Codec就是GB18030的了
离线kjade
只看该作者 7楼 发表于: 2012-08-04
你好!我遇到了跟你一样的问题,按照你帖子中说的方法我试了一下还是不行,请问你的编码方式是GBK还是UTF-8?这个问题我急需解决,先道一声感谢。如果方便能否将你的代码发给我看看。QQ号:407504119
快速回复
限100 字节
 
上一个 下一个