• QT使用MSVC编译器时中文报错问题


    BUG

    在QT中,如果编译器是MSVC,默认情况下中文可能出现异常!

    比如 “名” 这个字:

    1. QString a="名";
    2. qDebug()<<"名";
    3. QMessageBox::information(NULL,"名","");

    以上等等操作都会报错无法编译,错误提示:

    继续测试发现“名称”、“名医”、“名著” 等正常,“用户名”等不正常;

    “名0”、“名1”等可以正常编译,但输出的是乱码;

    再继续测试:

    1. QString a="名\n";
    2. qDebug()<

    发现输出的结果是:

     

    "名\\n"  这显然不是正确的结果!正确的应为:"名\n"

    多出的这个反斜杠 \ 应该就是导致报错的原因!

    实际上,并不单单是“名”这个字是这样,单个汉字大多有这个情况!

    解决方法

    方法一:使用Clang编译器或者MinGW编译器(推荐Clang)

    方法二:

    1、点击 编辑 菜单,选择Select Encoding,如图:

    在弹出的对话框中,选择“GBK/CP936/MS936/windows-936”,然后点击“按编码保存”: 

    此时编译不会报错了,但中文输出显示的是乱码!

    2、在文件头加入一行代码:

    #pragma execution_character_set("utf-8")

    如图: 

     这样就可以了!

    注意:MSVC2010以后的版本才支持!

    可以加入判断,写成这样:

    1. #if _MSC_VER >= 1600 // >=MSVC2010
    2. #pragma execution_character_set("utf-8"
    3. #endif

     附一张MSVC编译器版本对照表:

    1. MSC 1.0 _MSC_VER == 100
    2. MSC 2.0 _MSC_VER == 200
    3. MSC 3.0 _MSC_VER == 300
    4. MSC 4.0 _MSC_VER == 400
    5. MSC 5.0 _MSC_VER == 500
    6. MSC 6.0 _MSC_VER == 600
    7. MSC 7.0 _MSC_VER == 700
    8. MSVC++ 1.0 _MSC_VER == 800
    9. MSVC++ 2.0 _MSC_VER == 900
    10. MSVC++ 4.0 _MSC_VER == 1000 (Developer Studio 4.0)
    11. MSVC++ 4.2 _MSC_VER == 1020 (Developer Studio 4.2)
    12. MSVC++ 5.0 _MSC_VER == 1100 (Visual Studio 97 version 5.0)
    13. MSVC++ 6.0 _MSC_VER == 1200 (Visual Studio 6.0 version 6.0)
    14. MSVC++ 7.0 _MSC_VER == 1300 (Visual Studio .NET 2002 version 7.0)
    15. MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio .NET 2003 version 7.1)
    16. MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005 version 8.0)
    17. MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008 version 9.0)
    18. MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010 version 10.0)
    19. MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012 version 11.0)
    20. MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013 version 12.0)
    21. MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015 version 14.0)
    22. MSVC++ 14.1 _MSC_VER == 1910 (Visual Studio 2017 version 15.0)
    23. MSVC++ 14.11 _MSC_VER == 1911 (Visual Studio 2017 version 15.3)
    24. MSVC++ 14.12 _MSC_VER == 1912 (Visual Studio 2017 version 15.5)
    25. MSVC++ 14.13 _MSC_VER == 1913 (Visual Studio 2017 version 15.6)
    26. MSVC++ 14.14 _MSC_VER == 1914 (Visual Studio 2017 version 15.7)
    27. MSVC++ 14.15 _MSC_VER == 1915 (Visual Studio 2017 version 15.8)
    28. MSVC++ 14.16 _MSC_VER == 1916 (Visual Studio 2017 version 15.9)
    29. MSVC++ 14.2 _MSC_VER == 1920 (Visual Studio 2019 Version 16.0)
    30. MSVC++ 14.21 _MSC_VER == 1921 (Visual Studio 2019 Version 16.1)
    31. MSVC++ 14.22 _MSC_VER == 1922 (Visual Studio 2019 Version 16.2)

  • 相关阅读:
    SpringBoot+ECharts+Html 字符云/词云案例详解
    基于ssm的美妆产品进销存管理系统的设计与开发-计算机毕业设计源码
    Go基础 Map
    接收区块链的CCF会议--SAGT 2024 截止5.21 附录用率
    类加载器及反射简单笔记
    解决因对EFCore执行SQL方法不熟练而引起的问题
    金仓数据库KingbaseES安全指南--10.数据脱敏
    cmake简洁教程 - 第五篇
    项目管理过程组
    03.获取网页源代码
  • 原文地址:https://blog.csdn.net/s806903/article/details/126809984