导言

如上所示,在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模块可以简单且快速地解决这个乱码问题。
工程代码:
- github:https://github.com/q164129345/myPyside6_QML/tree/main/debugLog01_the_sample_method
- gitee: https://gitee.com/wallace89/myPyside6_QML/tree/main/debugLog01_the_sample_method
一、代码
1.1、使用qInstallMessageHandler模块
如上所示,在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、效果

