Visual Studio 2019 + Qt5 C++编程的中文处理

本文详细介绍了如何在VisualStudio和QtCreator之间切换编程时解决中文乱码问题。通过设置编码、修改项目配置、文件保存格式以及调整命令行窗口的代码页,确保在两个环境中都能正确显示中文。关键步骤包括在C++代码中使用`u8`前缀、设置Qt的locale编码、修改编译器选项以及更新注册表以改变命令行窗口的编码。
摘要由CSDN通过智能技术生成

单独在Visual Studio 或者QtCreator中用C++编程,那么用缺省的编码来处理中文,应该是没什么问题的,但如果要在这两者之间不停切换编程,中文的乱码就是我们经常会遇到的问题了。

网上给出多种乱七八糟的方式,都只能解决某部分的问题,我参考了这些文章,给出一个完整的解决方案。

彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)_libaineu2004的博客-CSDN博客_qt中文乱码
【图片】VS2019+QT控制台中文乱码【qt吧】_百度贴吧
 

Qt5中文乱码及qDebug()无乱码输出中文_airts001的博客-CSDN博客_qt中qdebug能输出汉字吗

1. 在主程序中加入 textCodec 设置:

    QTextCodec *textCodec = QTextCodec::codecForName("utf-8");
    QTextCodec::setCodecForLocale(textCodec);

注:如果不在 qDebug 中输出中文,则可以不加上面的设置

2. 中文字符串前加上u8,比如:

        u8"中文调试"

3. VS属性->C/C++->所有选项->附加选项->加上/UTF-8;

4. QtCreator的.pro文件中增加:

        QMAKE_CXXFLAGS += /source-charset:utf-8

        QMAKE_CXXFLAGS += /execution-charset:utf-8

5. 所有文件以 UTF-8(BOM) 的格式进行保存;

6. 如果命令行窗口显示的中文为乱码,则需要改变其代码设置为:65001(UTF-8)

使用regedit修改在 "计算机\\HKEY_CURRENT_USER\\Console" 中的cmd相关值(如果没有则新建一个项)

(1)Visual Studio 的命令行窗口参数:

C:_Program Files(x86)_Microsoft Visual Studio_2019_Community_Common7_IDE_CommonExtensions_Platform_Debugger_VsDebugConsole.exe

项下修改或新建如下项:

CodePage REG_DWORD 0x0000fde9(65001)

(2)QtCreator 的命令行窗口参数:

D:_Qt_Tools_QtCreator_bin_qtcreator_process_stub.exe

项下修改或新建如下项:

CodePage REG_DWORD 0x0000fde9(65001)

(3)cmd的参数:

%SystemRoot%_system32_cmd.exe

项下修改或新建如下项:

CodePage REG_DWORD 0x0000fde9(65001)

如果没有则新建这些项,并根据自己的安装目录进行相应的修改。

测试代码:

#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

	// 为了qDebug 输出中文,如果qDebug不用输出中文,则可以不加
    QTextCodec *textCodec = QTextCodec::codecForName("utf-8");
    QTextCodec::setCodecForLocale(textCodec);


    QString strChinese = u8"微软的Visual Studio 只能识别出UTF-8(BOM)格式文件,不能识别UTF-8文件,这个格式在QT中能够被正常处理\n"
		u8"注意:\n"
		u8"	1. 中文字符串前加上u8"
		u8"	2.显示时用 toUtf8() 进行转换\n\n"
		u8"注意,命令行窗体的代码页也要设置为:65001\n"
		u8"使用regedit修改:"
		u8"在 计算机\\HKEY_CURRENT_USER\\Console 下\n"
		u8"Visual Studio 的命令行窗口参数:\n"
		u8"C:_Program Files(x86)_Microsoft Visual Studio_2019_Community_Common7_IDE_CommonExtensions_Platform_Debugger_VsDebugConsole.exe\n"
		u8"CodePage REG_DWORD 0x0000fde9(65001)\n\n"
		u8"QtCreator 的命令行窗口参数:\n"
		u8"D:_Qt_Tools_QtCreator_bin_qtcreator_process_stub.exe\n"
		u8"CodePage REG_DWORD 0x0000fde9(65001)\n\n"
		u8"如果没有则新建这些项,并根据自己的安装目录进行相应的修改。";

    printf(u8"在Visual Studio和QtCreator两者中同时使用中文的注意事项:\n\n");
    printf("%s\n\n", strChinese.toUtf8().data());

    QString str = u8"中文调试";
    //qDebug() << textCodec->toUnicode(str.toStdString().data());
	qDebug() << u8"保证在VS和QT中都能正常显示中文的总结:";
	qDebug() << u8"1. 在主程序中加入 textCodec 设置,中文字符串前加上u8";
    qDebug() << u8"2. VS属性->C/C++->所有选项->附加选项->加上/UTF-8";
    qDebug() << u8"3. QtCreator的.pro文件中增加:QMAKE_CXXFLAGS += /source-charset:utf-8";
	qDebug() << u8"                              QMAKE_CXXFLAGS += /execution-charset:utf-8";
	qDebug() << u8"所有文件以 UTF-8(BOM) 的格式进行保存";
	qDebug() << u8"如果在命令窗口显示中文乱码,则参考上面的设置。";
    return a.exec();
}

.pro 文件:

QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle


# VS中在属性->C++->All options->Additional Options 增加:/utf-8
# 源代码那里设置UTF-8
# 设置源代码文件字符集
QMAKE_CXXFLAGS += /source-charset:utf-8
# 设置exe文件字符集
QMAKE_CXXFLAGS += /execution-charset:utf-8

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值