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、效果

相关推荐
四维碎片10 小时前
QSettings + INI 笔记
笔记·qt·算法
SilentSlot17 小时前
【QT-QML】1. 快速入门
开发语言·qt·qml
datalover18 小时前
netty实现rpc
qt·网络协议·rpc
离离茶18 小时前
【笔记1-10】Qt bug记录:dockwidget通过raise在最前面显示,toolbar的拓展菜单失效
笔记·qt·bug
SunkingYang19 小时前
QT中如何遍历QList与QStringList容器分别都有什么功能,如何来使用它们?
qt·用法·区别·功能·用途·qlist·qstringlist
ChindongX21 小时前
garbage at the end of the document
qt·json
SNAKEpc1213821 小时前
PyQtGraph应用(一):常用图表图形绘制
python·qt·pyqt
SunkingYang21 小时前
QT编译报错:“error: macro name missing“原因分析与解决方案详解
qt·error·macro·编译报错·name·missing
未来可期LJ21 小时前
【Qt 开发】Qt QFileDialog 文件对话框详解
开发语言·qt
SilentSlot1 天前
【QT-QML】2. QML语法
开发语言·qt·qml