解决方案
CSharp运行matlab库时报错libmwlapack: load error: mkl.dll.的解决方案MWMCR:EvaluateFunction error找不到指定模块
win11离线安装donet3.5的方法
Qt6离线安装方式
QFile无法打开文件明明文件已经存在却无法打开open failed路径或者卷标不正确奇葩问题
关于启用https访问Mrdoc网站cloudflare服务支持http和https同时访问
VS编译工程提示错误error C1083: 无法打开包括文件: “stddef.h”: No such file or directory该文件指向win10 kits安装windows SDK10具体方法
关于Matlab调用Python时出现的错误解决方案Python 命令需要支持的 Cpython 版本。请参阅 <a href="matlab:helpview([docroot'/matlab/helptargets.map’]
Docker构件镜像时 Sending build context to Docker daemon远远超过原镜像大小docker build超出大小原因
QEnum的正确使用方法QMetaEnum::fromType方式总是为空isValid总是为false的解决方案和方法通过键获取值通过值获取键Q_ENUM注册失败
关于静态库的使用的注意事项动态库改静态库的不同static library
windows上Qt编译源码open source building vs2022 qt5.15.17版本编译环境问题 环境配置编译QT依赖安装
Qt5.15.17源码编译的最终版windows下使用VisualStudio编译QtWebEngine组件遇到的问题及解决方案使用VS2019进行编译启用GPU硬件加速显卡OpenGL(最终版)
Qt在MainWindows上悬浮一个QWidget窗体,窗体内有四个按钮,保持QWidget在Mainwin的正中间并设置为透明背景黑色设置无效
windows脚本bat建立目录软链接 系统找不到指定的路径
rdkafka接收数据慢的解决方案发送完了却没有接收完的问题
Qt通过QSS样式将QToolButton下拉弹出菜单的提示按钮由右边让其底部居中显示
使用Qss设置背景图片的一些问题记录不生效,效率低,背景图片不能拉伸
CMakeList管理一个工程引用另外一个工程库该注意
CMakeList设置输出bin和lib目录
CMakeList中实现编译完成后自动拷贝指定文件到指定目录copy
QT工程中文出现乱码的解决方案编译后中文显示不正确显示乱码utf-8编码编译编码
windows下编译Minio cpp客户端编译过程
本文档使用 MrDoc 发布
-
+
首页
QT工程中文出现乱码的解决方案编译后中文显示不正确显示乱码utf-8编码编译编码
# 情况说明 最开始是用msvc+CMakeList.txt来管理的工程项目,有的工程是通过原有工程项目转换过来,文件使用的编码可能是ASIC码,后面新建的文件大部分是utf-8编码文件。有的中文用QStringLiteral包裹起来,中文显示是正常的。但编译到Linux下时,这部分被包裹的中文会报错,无法编译成功。去除该QStringLiteral后,又会显示乱码。去掉后,在win下编译也会在有中文输入的地方提示“含有常量换行符”,无法编译成功... # 解决方案 ==解决方案就是,将cpp或者h文件全部转为utf-8编码,并在编译指令中显示指定编码为utf-8即可!== ## 转换编码为utf-8 这一部分可以使用python脚本一次性转换所有的文件。参考代码: ```python import os import codecs import chardet def detect_encoding(file_path): """检测文件编码""" with open(file_path, 'rb') as f: raw_data = f.read() result = chardet.detect(raw_data) return result['encoding'], raw_data def convert_file(file_path): """转换单个文件到UTF-8编码""" try: # 检测文件原始编码 encoding, raw_data = detect_encoding(file_path) if not encoding: print(f"警告: 无法检测 {file_path} 的编码,跳过") return # 读取文件内容 try: content = raw_data.decode(encoding) except (UnicodeDecodeError, LookupError) as e: print(f"错误: 解码 {file_path} 时出错时出错 ({encoding}): {str(e)}") return # 统一换统一换行符为LF content = content.replace('\r\n', '\n').replace('\r', '\n') # 以UTF-8编码保存文件 with codecs.open(file_path, 'w', encoding='utf-8') as f: f.write(content) print(f"已转换: {file_path} (从 {encoding})") except Exception as e: print(f"处理 {file_path} 时发生错误: {str(e)}") def process_directory(directory='.'): """递归处理目录中的所有CPP文件""" for root, dirs, files in files in os.walk(directory): for file in files: if file.endswith('.cpp'): file_path = os.path.join(root, file) convert_file(file_path) if __name__ == "__main__": current_dir = os.getcwd() print(f"开始处理目录: {current_dir}") process_directory(current_dir) print("转换完成!") ``` ## 显示指定编译时编码为utf-8 参考写法: ``` cmake_minimum_required(VERSION 3.15) project(MyUtf8Project LANGUAGES CXX) # 创建一个接口库来管理编码设置 add_library(utf8_config INTERFACE) if(MSVC) # Visual Studio / MSVC target_compile_options(utf8_config INTERFACE /utf-8) target_compile_definitions(utf8_config INTERFACE _UNICODE UNICODE ) else() # GCC, Clang, Intel etc. target_compile_options(utf8_config INTERFACE -finput-charset=UTF-8 -fexec-charset=UTF-8 -fwide-exec-charset=UTF-8 ) endif() # 对每个目标应用编码设置 add_executable(my_program main.cpp source1.cpp source2.cpp) target_link_libraries(my_program PRIVATE utf8_config) # 如果是库项目 add_library(my_library STATIC lib_source1.cpp lib_source2.cpp) target_link_libraries(my_library PUBLIC utf8_config) ``` 关键点解释: 对于 MSVC (/utf-8): /utf-8 选项告诉编译器源代码文件和字符串字面量都使用 UTF-8 编码 同时设置 _UNICODE 和 UNICODE 宏启用 Windows Unicode API 对于 GCC/Clang: -finput-charset=UTF-8:指定源文件编码为 UTF-8 -fexec-charset=UTF-8:指定执行时字符集为 UTF-8 -fwide-exec-charset=UTF-8:指定宽字符执行字符集为 UTF-8  至此,能够使得中文编译和显示是正常的。 编辑:myhappyandy
虚拟世界
2025年11月23日 23:26
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码