PySide6 + QML - 调试日志01 -告别打印log中文乱码,快速且简单地解决

导言


如上所示,在qml代码里调用console.log打印中文log时会出现乱码。
Windows OS Qt C++ Engine App Logic Step 1: Log Request Step 2: Writes Raw UTF-8 Bytes
(No Python conversion) Step 3: Terminal reads bytes
assuming GBK/CP936 stdout Windows Terminal
(PowerShell / CMD) Qt Default Handler
(Internal C++) QML Code
console.log('中文') Result:
Garbled Text

出现乱码的原因是qml输出的编码是UTF-8,但是,Windows终端显示的编码格式是GBK/CP936。

使用qInstallMessageHandler模块可以简单且快速地解决这个乱码问题。

工程代码:

一、代码


1.1、使用qInstallMessageHandler模块

main.py

如上所示,在main.py增加代码qInstallMessageHandler(lambda mode, context, message: print(message))
Python (main_loader.py) Qt Environment Executes JS Redirects text Emits Message
(UTF-8) Auto-converts
to System Locale qInstallMessageHandler
(Custom Listener) Python print() QML Code
console.log('中文') Qt Backend
Message System Windows Terminal
CP936/GBK

如上所示,qInstallMessageHandler模块里面使用Python的print()将qml输出的UTF-8格式的消息自动转换为系统终端所需的编码器格式。比如,Windows终端需要CP936/GBK格式。

Main.qml

Main.qml不需要改动。

1.2、效果

相关推荐
不会c嘎嘎1 天前
QT中的常用控件 (二)
开发语言·qt
宠..1 天前
优化文件结构
java·服务器·开发语言·前端·c++·qt
CoderIsArt1 天前
基于iSCSI的光存储软件架构设计 (Windows + Qt版本)
开发语言·windows·qt
深蓝海拓1 天前
PySide6从0开始学习的笔记(二十二) 几种封装信号传递内容的方法
笔记·python·qt·学习·pyqt
赤鸢QAQ1 天前
PySide6批量创建控件
python·qt·pyqt
宠..1 天前
奇怪的语法错误
运维·服务器·数据库·qt·microsoft
长沙红胖子Qt1 天前
QXlsx开发笔记(三):单元格边框合并,设置宽度、高度、边框样式等综合操作Demo
qt·qxlsx
Henry Zhu1232 天前
Qt事件驱动与信号槽原理分析
qt
qq_401700412 天前
QBoxLayout支持水平布局和垂直布局构建一个键盘
qt
Henry Zhu1232 天前
Qt实现事件发布订阅系统
开发语言·qt