zoukankan      html  css  js  c++  java
  • Qt MSVC编译器中文字符串编译报错及乱码问题

    一、使用MSVC编译器编译时字符串含有中文,编译报错

      首先明白为什么会报错:Qt Creator IDE生成的源代码文件默认采用的编码是UTF-8(可以使用类似Notepad++这种编辑器打开查看文件编码),但是MSVC编译器可以支持源代码文件的编码为UTF-8-BOM(即带BOM格式的),即默认不支持UTF-8。所以解决方案就有2个:一是让MSVC支持UTF-8,也就是下面方案1;二是将Qt Creator生成的源代码文件的编码转换成UTF-8-BOM即下面的方案2

     解决方案一:修改.pro文件,在.pro文件中添加以下设置,然后qmake重新编译即可通过

    win32-msvc*: {
        QMAKE_CFLAGS *= /utf-8
        QMAKE_CXXFLAGS *= /utf-8
    }

     

     解决方案二:将源代码文件的编码转换成UTF-8-BOM

     1.先来查看一下Qt Creator源代码文件原来的编码及编译结果

     2.使用Notepad++或其他编辑器将源代码文件转成UTF-8-BOM

     

     3.重新qmake后,编译并运行结果如下:

     4.Qt Creator默认编码设置(菜单栏“工具”-“选项”)

    二、中文显示乱码问题解决(前提是已解决中文字符编译报错问题)

      上面的解决中文字符串编译报错方案2虽然解决了编译问题,但是最后还是发现又问题,即中文显示乱码。其本质原因还是因为方案2并没有真正让msvc编译器使用UTF-8编码导致。解决方案同样有2种:

    方案1:将代码种所有的中文字符串用QStringLiteral宏包裹:

    方案2:在含有中文字符串的源代码文件的第一行(注意是第1行,即文件最开始位置)添加以下MSVC的预编译指令,让msvc支持utf-8(Linux下自动忽略)

    #if _MSC_VER >=1600
    #pragma execution_character_set("utf-8")
    #endif
    或者直接一句
    #pragma execution_character_set("utf-8")

    三、最简单同时解决中文字符编译报错、显示乱码的方式

      即最开始的方案1,在.pro文件加入设置,qmake后重新编译执行。

  • 相关阅读:
    转:Oracle中的日期和字符串互相转换
    jQuery DateTimePicker 日期和时间插件
    js转换时间戳-转换成 yyyy-MM-dd HH:mm:ss
    linux下载服务器上的文件命令-sz
    eclipse中集成maven
    maven的安装和环境配置
    eclipse复制粘贴变卡的解决办法
    在表单提交之前做校验-利用jQuery的submit方法
    centos7 ipaddr 无法查看虚拟机IP解决办法
    linux下tomcat启动很慢的解决办法
  • 原文地址:https://www.cnblogs.com/djh5520/p/13879885.html
Copyright © 2011-2022 走看看