开发者社区> 问答> 正文

Qt 如何判断打开文件的编码?:报错

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的。有没有办法可以判断这个文件是什么编码的?

  我是新手,请多多指教!

展开
收起
kun坤 2020-06-07 16:40:47 938 0
1 条回答
写回答
取消 提交回答
  • 顶起来,大侠们都来帮帮我呗


    复制去Google翻译 翻译结果
    ######

    这个无解啊。。。

    ######

    引用来自“红薯”的答案

    这个无解啊。。。

    那是为什么? Notepad++这个编辑器它读取UTF8的还是GBK的文本文件都没问题 中文都不会是乱码啊

    这是怎么做到的?

    ######这个软件时开源的,如果要研究你可以去看代码。但其判断的结果肯定也不是100%准确的。######

    看看这两个:

    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下有的可能性不低。

    如果没有,那的确没有保证的法子了。浏览器对待没指定编码的网页的做法通常是根据内容用不同编码格式来猜可能性最高的,但不能保证正确。


    2020-06-07 16:40:52
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关镜像