QFile file(f); if (!file.open(QFile::ReadOnly)) return false; QTextStream in(&file); const QString &text = in.readAll(); in.seek(0); in.setCodec(QTextCodec::codecForName("utf-8")); in.setGenerateByteOrderMark(true); in << text; in.seek(0); qDebug() << stream.readAll();
我就不知道这个文本文件的编码,比如是UTF8还是GBK的,所以读取出来就会有乱码?上面的代码UTF8是没问题,但还是没法读取GBK的。有没有办法可以判断这个文件是什么编码的?
我是新手,请多多指教!
顶起来,大侠们都来帮帮我呗
这个无解啊。。。
######这个无解啊。。。
那是为什么? Notepad++这个编辑器它读取UTF8的还是GBK的文本文件都没问题 中文都不会是乱码啊
这是怎么做到的?
看看这两个:
http://www.cnblogs.com/powertoolsteam/archive/2010/09/20/1831638.html
http://bbs.csdn.net/topics/90422580
然后试试二进制读文件的效果,看能不能使用这些方法
######文件本身只是二进制内容,怎么存存什么都是个人决定的,所以 如果文件本身不提供除内容外的其它类型和编码的信息,没有简单的办法判断。
所以才会有不同的不兼容的文件格式,如果软件要支持某种格式,必须事先知道某种文件格式怎么定义的。
就普通的文本文件,只能根据不同编码的特点去猜,但由于各种编码也没有唯一的不同点,所以几乎实现不了。
比如先假定文件是UTF-8编码,按UTF-8去读取,看看是否有无法解析的字符,然后再按UTF-16去读取,是否有FEFF的大端小端指示字节对,如果没有再按UTF-16BE或UTF-16LE去读取看看有没有不正常的字符,然后再按GBK去读,或者其它编码格式去读。
但目前各国的编码太多了,如果全部考虑,更是难实现,这得编码专家去弄了,得学太多东西。
######大概明白了怎么回事了 谢谢######我记得原来有个想了个笨方法。就是编码不同,二进制的前几未是不一样的。不知道是不是。好像有几位固定的######http://bbs.csdn.net/topics/230061632######按照二进制读取然后对比######谢谢 我试试######拿到一定长度的 字节流 然后判断含有哪些 byte 就知道是什么东西了######如果是文本文件,先尝试读前两个字节,看是否是BOM,windows下有的可能性不低。
如果没有,那的确没有保证的法子了。浏览器对待没指定编码的网页的做法通常是根据内容用不同编码格式来猜可能性最高的,但不能保证正确。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。