CLion 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("$<$:/utf-8>")
add_compile_options("$<$:/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("$<$:/utf-8>")
add_compile_options("$<$:/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
            "$/plugins/platforms/")
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy
            "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
            "$/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"
            "$")
    endforeach (QT_LIB)
endif ()

或者在:

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

添加:

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

你可能感兴趣的:(C&C++,IDE&OS,开发语言,c++,qt)