CLion + MSVC 下的字符编码、乱码问题

CLion控制台乱码:

控制台Messages乱码(230914):

Help->Edit Custom VM Options...中添加下列代码:

-Dconsole.encoding=UTF-8
-Dfile.encoding=UTF-8

 

重启CLion,运行正常。

如果以上还无法解决乱码:

以下步骤:JetBrains 提供了官方解决方案,如果是使用 MinGW,先按图所示操作,把编码方式改为 GBK,VSCode 在使用 MinGW 时,也需要在配置文件中设置编码方式为 GBK,才能正常显示中文。

warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

 原因是 CLion 默认使用 UTF-8 编码,MSVC 继承了 MS 家族的一贯传统,除非明确指定否则要么 UTF-8 with BOM 要么当前代码页。

解决办法是加上命令行开关就行了: ​​\utf-8​​​ 或者 ​​source-charset:utf-8 /execution-charset:utf-8​​​ ​ ​参见MSVC文档>>​​

默认创建的项目是 CMake 的,在 ​​CMakeList.txt​​ 中加入如下内容即可:

add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
必须位于 add_executable(……) 之前


或者 

-D CMAKE_CXX_FLAGS="/utf-8"

cmake_minimum_required(VERSION 3.25)
project(CppGuiProgrammingWithQt4InCLion)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

set(CMAKE_PREFIX_PATH "C:/ProgramFiles/Qt/5.15.2/msvc2019_64/lib/cmake")

find_package(Qt5 COMPONENTS
    Core
    Gui
    Widgets
    REQUIRED)

// 编码设置。
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")

add_executable(CppGuiProgrammingWithQt4InCLion main.cpp ch14/controller.cpp ch14/thread.cpp ch14/thread.h ch14/thread-dialog.cpp ch14/thread-dialog.h ch14/worker.cpp ch10/currency-model.cpp ch10/currency-model.h ch10/show-model.cpp ch10/show-model.h ch10/team-leaders-dialog.cpp ch10/team-leaders-dialog.h ch07/ticker.cpp ch07/ticker.h ch07/ticker-from-left-to-right.cpp ch07/ticker-from-left-to-right.h ch06/find-file-dialog.cpp ch06/find-file-dialog.h ch06/mail-client.cpp ch06/mail-client.h ch06/preference-dialog.cpp ch06/preference-dialog.h ch05/plot-settings.cpp ch05/plot-settings.h ch04/main-window.cpp ch04/main-window.h ch02/employee.cpp ch02/employee.h ch02/find-dialog.cpp ch02/find-dialog.h ch02/go-to-cell-dialog.cpp ch02/go-to-cell-dialog.h ch02/sort-dialog.cpp ch02/sort-dialog.h ch10/track.cpp ch10/track.h ch10/track-editor.cpp ch10/track-editor.h ch10/track-delegate.cpp ch10/track-delegate.h ch10/track-model.cpp ch10/track-model.h)
target_link_libraries(CppGuiProgrammingWithQt4InCLion
    Qt5::Core
    Qt5::Gui
    Qt5::Widgets
    )

if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
    set(DEBUG_SUFFIX)
    if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
        set(DEBUG_SUFFIX "d")
    endif ()
    set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")
    if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
        set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
        if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
            set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
        endif ()
    endif ()
    if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E make_directory
            "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy
            "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
            "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
    endif ()
    foreach (QT_LIB Core Gui Widgets)
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy
            "${QT_INSTALL_PATH}/bin/Qt5${QT_LIB}${DEBUG_SUFFIX}.dll"
            "$<TARGET_FILE_DIR:${PROJECT_NAME}>")
    endforeach (QT_LIB)
endif ()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值