精华内容
下载资源
问答
  • Qt实现文件夹文件 批量UTF8加BOM 批量UTF8文件BOM void MainWindow::on_pushButton_48_clicked() {//选择目录除bom QString strPath = YCTools::getFolderName(); QStringList filter = {"*.h","*.cpp","*.txt"}...

    Qt实现文件夹文件 批量UTF8加BOM
    批量UTF8文件除BOM

    void MainWindow::on_pushButton_48_clicked()
    {//选择目录除bom
        QString strPath = YCTools::getFolderName();
        QStringList filter = {"*.h","*.cpp","*.txt"};
        QStringList stringList = YCTools::getFolderFileNames(strPath,filter);
        for(auto file:stringList)
        {
            QByteArray byteArray;
            if(YCTools::openByteFile(file,byteArray))
            {
                //QT TextStream读取文件自动把bom标识取消掉了!!!!!
                if(isUTF8(byteArray.data())){
                    if( (quint8(byteArray[0]) == 0xEF) && (quint8(byteArray[1]) == 0xBB) && (quint8(byteArray[2]) == 0xBF)) {
    
                        writeEdit("文件除Bom标记\t\t" + file);
                        QByteArray saveArray = byteArray.right(byteArray.size() - 3);
                        YCTools::saveByteFile(file,saveArray);
                    }
                }
                else {
                    writeEdit("此文件不是UTF文件\t\t" + file);
                }
    
            }
        }
    }
    
    void MainWindow::on_pushButton_47_clicked()
    {//选择目录文件加bom
        QString strPath = YCTools::getFolderName();
        QStringList filter = {"*.h","*.cpp"};
        QStringList stringList = YCTools::getFolderFileNames(strPath,filter);
        for(auto file:stringList)
        {
            QByteArray byteArray;
            if(YCTools::openByteFile(file,byteArray))
            {
                //QT TextStream读取文件自动把bom标识取消掉了!!!!!
                if(isUTF8(byteArray.data())){
                    if( ((quint8)byteArray[0] == 0xEF) && ((quint8)byteArray[1] == 0xBB) && ((quint8)byteArray[2] == 0xBF)) {
                        //有EF BB BF说明有bom
                    }
                    else {
                        writeEdit("文件加Bom标记\t\t" + file);
                        byteArray.insert(0,"\xEF\xBB\xBF",3);
                        YCTools::saveByteFile(file,byteArray);
                    }
                }
                else {
                    writeEdit("此文件不是UTF文件\t\t" + file);
                }
    
            }
            else {
                return;
            }
        }
    }
    
    展开全文
  • QT 文件读写

    2015-06-30 10:53:04
    上一章我们介绍了有关二进制文件的读写。二进制文件比较小巧,却不是人可读的格式。... XML、HTML 这种,虽然也是文本文件,可以由QTextStream生成,但 Qt 提供了更方便的 XML 操作类,这里就不包括这部分



    上一章我们介绍了有关二进制文件的读写。二进制文件比较小巧,却不是人可读的格式。而文本文件是一种人可读的文件。为了操作这种文件,我们需要使用QTextStream类。QTextStreamQDataStream的使用类似,只不过它是操作纯文本文件的。另外,像 XML、HTML 这种,虽然也是文本文件,可以由QTextStream生成,但 Qt 提供了更方便的 XML 操作类,这里就不包括这部分内容了。

    QTextStream会自动将 Unicode 编码同操作系统的编码进行转换,这一操作对开发人员是透明的。它也会将换行符进行转换,同样不需要自己处理。QTextStream使用 16 位的QChar作为基础的数据存储单位,同样,它也支持 C++ 标准类型,如 int 等。实际上,这是将这种标准类型与字符串进行了相互转换。

    QTextStreamQDataStream的使用基本一致,例如下面的代码将把“The answer is 42”写入到 file.txt 文件中:

    这里,我们在open()函数中增加了QIODevice::Truncate打开方式。我们可以从下表中看到这些打开方式的区别:

    枚举值描述
    QIODevice::NotOpen未打开
    QIODevice::ReadOnly以只读方式打开
    QIODevice::WriteOnly以只写方式打开
    QIODevice::ReadWrite以读写方式打开
    QIODevice::Append以追加的方式打开,新增加的内容将被追加到文件末尾
    QIODevice::Truncate以重写的方式打开,在写入新的数据时会将原有数据全部清除,游标设置在文件开头。
    QIODevice::Text在读取时,将行结束符转换成 \n;在写入时,将行结束符转换成本地格式,例如 Win32 平台上是 \r\n
    QIODevice::Unbuffered忽略缓存

    我们在这里使用了QFile::WriteOnly | QIODevice::Truncate,也就是以只写并且覆盖已有内容的形式操作文件。注意,QIODevice::Truncate会直接将文件内容清空。

    虽然QTextStream的写入内容与QDataStream一致,但是读取时却会有些困难:

    在使用QDataStream的时候,这样的代码很方便,但是使用了QTextStream时却有所不同:读出的时候,str 里面将是 The answer is 42,ans 是 0。这是因为以文本形式写入数据,是没有数据之间的分隔的。还记得我们前面曾经说过,使用QDataStream写入的时候,实际上会在要写入的内容前面,额外添加一个这段内容的长度值。而文本文件则没有类似的操作。因此,使用文本文件时,很少会将其分割开来读取,而是使用诸如QTextStream::readLine()读取一行,使用QTextStream::readAll()读取所有文本这种函数,之后再对获得的QString对象进行处理。

    默认情况下,QTextStream的编码格式是 Unicode,如果我们需要使用另外的编码,可以使用

    这样的函数进行设置。

    另外,为方便起见,QTextStreamstd::cout一样提供了很多描述符,被称为 stream manipulators。因为文本文件是供人去读的,自然需要良好的格式(相比而言,二进制文件就没有这些问题,只要数据准确就可以了)。这些描述符是一些函数的简写,我们可以从文档中找到:

    描述符等价于
    binsetIntegerBase(2)
    octsetIntegerBase(8)
    decsetIntegerBase(10)
    hexsetIntegerBase(16)
    showbasesetNumberFlags(numberFlags() | ShowBase)
    forcesignsetNumberFlags(numberFlags() | ForceSign)
    forcepointsetNumberFlags(numberFlags() | ForcePoint)
    noshowbasesetNumberFlags(numberFlags() & ~ShowBase)
    noforcesignsetNumberFlags(numberFlags() & ~ForceSign)
    noforcepointsetNumberFlags(numberFlags() & ~ForcePoint)
    uppercasebasesetNumberFlags(numberFlags() | UppercaseBase)
    uppercasedigitssetNumberFlags(numberFlags() | UppercaseDigits)
    lowercasebasesetNumberFlags(numberFlags() & ~UppercaseBase)
    lowercasedigitssetNumberFlags(numberFlags() & ~UppercaseDigits)
    fixedsetRealNumberNotation(FixedNotation)
    scientificsetRealNumberNotation(ScientificNotation)
    leftsetFieldAlignment(AlignLeft)
    rightsetFieldAlignment(AlignRight)
    centersetFieldAlignment(AlignCenter)
    endloperator<<('\n')flush()
    flushflush()
    resetreset()
    wsskipWhiteSpace()
    bomsetGenerateByteOrderMark(true)

    这些描述符只是一些函数的简写。例如,我们想要输出 12345678 的二进制形式,那么可以直接使用

    就可以了。这等价于

    更复杂的,如果我们想要舒服 1234567890 的带有前缀、全部字母大写的十六进制格式(0xBC614E),那么只要使用

    即可。

    不仅是QIODeviceQTextStream也可以直接把内容输出到QString。例如

    这提供了一种简单的处理字符串内容的方法。

    展开全文
  • qt如何读取带Bom的UTF8编码的ini配置文件?同样的代码,同样qt,同样的vs2010,为什么我读不出来,而别人能读出来?qt配置还是vs2010全局配置不一样? QString qstrIniFilePath = QCoreApplication::...
  • QT与VS环境下代码文件编码格式使用utf-8与带BOM的utf-8的差异 使用QT进行开发的时候,有时候通常会遇到使用中文的时候,就算格式为utf-8,也会出现编译错误的问题,一般无从下手,这几天看到同事有专门研究这个问题...

    QT与VS环境下代码文件编码格式使用utf-8与带BOM的utf-8的差异

    使用QT进行开发的时候,有时候通常会遇到使用中文的时候,就算格式为utf-8,也会出现编译错误的问题,一般无从下手,这几天看到同事有专门研究这个问题,于是也决心花一点时间这地搞懂utf-8的编码。其中分为utf-8utf-8 BOM分别在QTVS环境下的差异。

    QT环境下有下面几个特点:

    1. 使用QT Creator 新建的文件,默认编码方式为无BOMutf-8
    2. 在没有中文的时候,utf-8utf-8 BOM都编译正常;
    3. 在有中文的时候,utf-8编译会报错,utf-8 BOM编译正常。

    https://img-blog.csdnimg.cn/20181112141504822.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpZXpob25neXVhbjA3,size_16,color_FFFFFF,t_70

    VS环境中:

    1. 在没有中文的时候,utf-8utf-8 BOM都可以编译通过;
    2. 在有中文的时候,utf-8编码,会编译报错,utf-8 BOM可以编译通过;
    3. 在有中文的时候,只要加上下面的代码,无论编码方式是什么,都可以编译通过。

    #pragma execution_character_set("utf-8")

    所以,我们平时是使用utf-8编码的时候,到底带不带BOM头呢?

    那么我们首先了解一下什么是BOM

    1.什么是BOM?

    BOM(byte-order mark),既字节顺序标记。它是插入到 utf-8utf-16 utf-32unicode编码的文件开头的标记。用来识别unicode文件的编码类型。

    它是存储在文件开头的,所以我们通常会叫BOM头。

    也就是标准的utf-8是不带BOM的,在utf-8编码的文件中放置BOM头,主要是微软的习惯。

    2.带BOM与不带BOM的区别?

    BOM utf-8 与不带BOMutf-8的区别在于有没有BOM。就是在文件的最开头有没有U+FEFF,也就是说有没有这个标记。

    3.带还是不带?

    跨平台编译的情况一定不能带。

    只在windows上编译的可有可无,如果带中文的,建议使用。

    展开全文
  • setGenerateByteOrderMark(), 文档说明如下: void QTextStream::setGenerateByteOrderMark(bool generate) If generate is true and a UTF codec is used, QTextStream will insert the BOM (Byte Order Mark) ...
    void CreateUTF8WithBom(const QString& path)
    {
        QFile f(filePath);
        f.open(QIODevice::WriteOnly | QIODevice::Truncate);
        QTextStream ts(&srcFile);
        ts.setGenerateByteOrderMark(true);    //这句是重点
        ts.setCodec("UTF-8");
        ts << utf8Data;
        f.close();
    }

    这里面最重要的调用就是 setGenerateByteOrderMark(), 文档说明如下:

    void QTextStream::setGenerateByteOrderMark(bool generate)

    If generate is true and a UTF codec is used, QTextStream will insert the BOM (Byte Order Mark) before any data has been written to the device. If generate is false, no BOM will be inserted. This function must be called before any data is written. Otherwise, it does nothing.

    展开全文
  • 使用QT进行开发的时候,有时候通常会遇到使用中文的时候,就算格式为utf-8,也会出现编译错误的问题,一般无从下手,这几天看到同事有专门研究这个问题,于是也...其中分为utf-8与utf-8 bom分别在QT与VS环境下的差异。
  • 批量去BOM工具(含Qt源码)

    热门讨论 2013-07-03 17:29:22
    批量去除文件夹下所有文本文件bom,解决 stray '\357' in program stray '\273' in program stray '\277' in program 的问题
  • QT中判断一个文件的字符编码格式,通常状况下,我们都可以根据文件BOM头来判断 下面是BOM头不存在的情况判断方式. QTextCodec::ConverterState state; QTextCodec *codec = QTextCodec::codecForName("UTF-8...
  • QT读JSON文件步骤,这里把过程记录一下,网上大多都是怎么写json的,对于读的,记录的不多首先JSON文件格式必须为UTF-8(非UTF-8 with BOM),UTF-8 with BOM 即为UTF-8 前加了BOM标识,会导致解析失败,报错内容非法,...
  • 现象: 1、QSS文件存在,能够读取 2、样式定义也正常 3、加载后样式没有效果 ...发现QSS文件编码被QT编辑器添加了BOM。 解决方法: 使用Notepad++把QSS文件编码改为UTF-8编码,去掉 bom。 重新启动,效果恢复正常 ...
  • Qt 文件写入后显示乱码问题

    千次阅读 2019-08-13 11:16:05
    以下是dbzhang关于qt中文乱码问题原因的阐述,觉得不错: 首先呢,声明一下,QString 是不存在中文支持问题的,很多人遇到问题,并不是本身 QString 的问题,而是没有将自己希望的字符串正确赋给QString。 很简单...
  • qt_文件管理

    2019-10-04 22:12:15
    qt_文件管理 QDir,QFile QDir 获取路径和进入文件夹,删除文件,文件夹 枚举 enum Filter { Dirs, AllDirs, Files, Drives, …, CaseSensitive } flags Filters enum SortFlag { Na...
  • 最近在网上找题做的时候,写了一个程序,写完了之后直接在Windows下的编译环境编译没问题,可以正常运行(环境:Win10,QCreator4,Qt5.13,MinGW),然后复制到Linux系统下(环境:Fedora9,QCeator2,Qt4.7,GCC)编译...
  • 1、Qt实现的gbk/utf8无bom文本转码小工具 2、用到了QDir QDirIterator 递归文件目录 3、QTextStream 以某种编码格式读取文本保存到QString,然后以另一种编码格式保存文本 代码比较简单。
  • 编码修改3.1 Qt Creator设置编码3.2 Qt Creator右键add UTF-8 BOM无效4.参考链接 1.问题现象 环境:win10 使用Qt5.12 + MSVC2017编译 当tr(“奇数个汉子”)或者tr(“中文与—123其它字符一起显示”) Qt报错:error ...
  • CodeTransmit 基于python开发的编码转换工具,图形化界面基于pyside2(也...可将文件编码转为UTF-8 BOM 、UTF-8、GB2312中的任意一种格式; src文件夹下是源码,exe文件夹下是打包好可直接在windows下运行的exe程序。
  • Qt读取qss文件失败或qss不生效解决方案

    千次阅读 多人点赞 2020-08-30 18:53:05
    qss文件读取成功,但是样式表不生效,用qDebug()输出的qss的字符,在开头有几个问号,而正好你又是通过windows下记事本创建的qss文件,那么不生效的本质问题就是BOM(自行百度),BOM只有在windows下采用“记事本”...
  • 文章目录Qt版本问题描述原因与解决 Qt版本 Qt5.12.2下验证无误,应该也适用于Qt5的其它版本 问题描述 使用QTextStream先读文件再写回去,发现文件编码改变了,主要代码片段如下: // 从文件读取内容,处理内容后,...
  • QT体系的文件编码

    2015-02-11 16:16:38
    这些语言各有异同,但是有一点是确定的,那就是这些文件都需要编码并且我们需要跨平台的编码Qt5已经完全的进入utf8时代了,也就是所有的文件编码都应该采用utf8编码注意,之所以添加bom完全是为了与其他编辑器协作做准备...
  • 4 Qt界面/工具/选项/文本编辑器/行为/UTF-8 BOM选择“总是删除”。 5 在使用qss美化控件时,该控件不能在设计师中编写样式表。如果在设计师中编写该控件的样式表这样导致读的qss针对该控件不生效 ...
  • 1、导入的csv文件字符集为utf-8,但是excel打开是要开bom的 如果不想用notepad++ 改(UTF-8-BOM)代码里加一行 void QTextStream::setGenerateByteOrderMark(bool generate)
  • QT修改qss文件后导致样式表不生效

    千次阅读 2017-03-20 17:37:39
    环境:Win7 64位 Qt5.5.1 问题描述:我的一个Qt工程原本样式表可以正常生效,但是在我改了qss样式表文件后,再重新构建工程运行,此时样式...第二步:Qt界面/工具/选项/文本编辑器/行为/UTF-8 BOM选择“总是删除”。 第
  • 文章目录问题描述解决方法1 修改编码2 设置Qt Creator3 重新编辑qss文件总结 问题描述 使用Qt Creator修改了qss文件后导致程序加载样式一直无效,一开始以为是修改的qss语法不对,反复确认语法没问题。最后通过网上...
  • qt 保存文件为utf8

    2019-07-05 10:17:00
    ZC: 查到说,下面的参数是true的话 就是保存成"UTF-8 + BOM",false的话 就是保存成"UTF-8" 19 // 但是,我尝试了一下,都是"UTF-8"... 不知为啥... 20 streamFileOut.setGenerateByteOrderMark( true ); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,554
精华内容 621
关键字:

bomqt文件