• 7036阅读
  • 6回复

读取文件乱码新问题 [复制链接]

上一主题 下一主题
离线紫露霜凝
 
只看楼主 倒序阅读 楼主  发表于: 2010-05-31
— 本帖被 XChinux 执行加亮操作(2010-09-03) —
各位路过者好,用qtextstream 读取文本内容时出现乱码,主要是设置好编码为GBK,但是针对不同的编码文本例如UTF8的文本,读取的时候会出现乱码;要是设为UTF8的,GBK又会是乱码,这个该怎么解决阿?看过路过的,给点建议吧,郁闷一个星期了,新的一周希望大家都有新收获!
离线happyday23

只看该作者 1楼 发表于: 2010-06-17
我也遇到过类似问题,由于我们要读取的文本有固定的格式,如果是乱码,格式就不正确,转而使用另一种编码。
离线紫露霜凝
只看该作者 2楼 发表于: 2010-08-28
回 1楼(happyday23) 的帖子
那岂不是要对各种编码进行判断了,想想就复杂
离线rootlife

只看该作者 3楼 发表于: 2010-08-30
现在中文LINUX上不是GBK之类的编码, 就是linux 最常用的UTF-8编码了,  这个编码问题每个软件都要面对,
打开文件的时候可以让用户选择编码方式, 同时提供编码方式的预览, 这是现今软件的通用处理方法.  

此外难道没有信息可能获取文件编码吗? 获取后再设置解码方式. ....................... ?????

UTF8格式的文本文件前三个字节是   EF   BB   BF,后面才是文本内容 ,不过这种方式并不好,文本文件的内容,前几个字节,难道就不能是EF BB, BF吗 或根本没有这些?
许多文件根本没有标识字节, 所以现在的文件系统应该更正一下,将编码属性直接放在文件属性中最好. 

请参考相关类: QTextCodec...

如果解决了此问题, 请在此留下你的解决方案,因为我们也需要.
[ 此帖被rootlife在2010-08-30 00:27重新编辑 ]
离线dbzhang800

只看该作者 4楼 发表于: 2010-08-30
这种问题基本没什么可讨论的,对纯文本,这种乱码问题理论上就无法解决。不然也就没有Unicode了。

UTF8 前面的BOM,是一个可选项。其实绝大多数 utf-8 的文件都不带BOM的。(BOM会带来其他的问题,如果你经常用的话,会有切身感受)

猜测编码的方式,不可靠,这也是无法改变的现实。
比如,一串字节流
'\xe6\x88\x91\xe6\x98\xaf\xe4\xb8\xad\xe6\x96\x87'

这是什么东西?用 utf8解码:恩
"我是中文"

用gb2312解码,恩,解码出错,前两个字节就出错了

用 gbk 解码,恩,解码出错,在第 8、9个字节上

用 gb13080解码,恩,解码成功,是6个汉字(尽管这六个汉字偶都不认识)
为了完整,给出他们的unicode吧
u'\u93b4\u621e\u69f8\u6d93\ue15f\u6783'

同一串流,既可以用 utf-8 解码,又可以用 gb13080 解码。这还是仅仅考虑简体中文的情况。如果你再考虑一下港澳台同胞,或者同是东亚的日韩,再或者面向世界,什么情况,自己想想就好
离线紫露霜凝
只看该作者 5楼 发表于: 2010-08-31
回 4楼(dbzhang800) 的帖子
那就是没有办法解决的了,难道不可以根据各种编码的特点进行区分,字节范围什么的,不能判定的就通过手动选择编码方式。
离线kinzess

只看该作者 6楼 发表于: 2010-09-08
有自动判断编码的库,不过,加上去后文件会变大..
用不用看你自己了~
快速回复
限100 字节
 
上一个 下一个