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

相关推荐
lqj_本人3 小时前
鸿蒙原生与Qt混合开发:性能优化与资源管理
qt·harmonyos
lqj_本人3 小时前
鸿蒙Qt字体实战:消灭“豆腐块“乱码与自定义字体加载
qt·华为·harmonyos
大牙Adela3 小时前
在Mac上通过Multipass虚拟机中的Ubuntu系统使用Graphviz工具
c语言·qt·ubuntu·macos·multipass·graphviz
QT 小鲜肉6 小时前
【数据库】MySQL数据库的数据查询及操作命令汇总(超详细)
数据库·笔记·qt·mysql
带土116 小时前
1. Qt-的安装和环境变量的配置
开发语言·qt
喵个咪20 小时前
Qt 6 实战:C++ 调用 QML 回调方法(异步场景完整实现)
前端·c++·qt
扶尔魔ocy1 天前
【QT opencv】手动去噪--网格化获取区域坐标
开发语言·qt·opencv
Hat_man_1 天前
虚拟机Ubuntu22.04交叉编译Qt5.15.2(ARM64)
开发语言·qt
lqj_本人1 天前
鸿蒙Qt音频实战:解决QMediaPlayer的高延迟与杂音问题
qt·音视频·harmonyos