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

相关推荐
码匠许师傅1 天前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
小王C语言1 天前
Qt常用控件:输入类控件,单行/多行输入框、下拉框、(日期)微调框、旋钮、滑动条
开发语言·qt
1001101_QIA1 天前
.exe does not seem to be a Qt executable.
开发语言·qt
ShineWinsu1 天前
对于Qt:QWidget通用属性的解析—上
数据库·qt·microsoft·面试·gui·属性·qwidget
Quz1 天前
QML 字体度量与文本度量:FontMetrics 与 TextMetrics
qt
Quz1 天前
QML 字体加载:FontLoader 与 FontInfo
qt
奇树谦1 天前
Qt | 基于 GVCP 协议的 GigE 工业相机 IP 配置工具
数码相机·qt·tcp/ip
扶尔魔ocy2 天前
【qt openGL入门笔记】windows编译MinGW版本的osgearth(2.10.1)
qt·opengl·osg
小王C语言2 天前
Qt常用控件:按钮类控件,普通按键、单选、复选
开发语言·qt
初阳7853 天前
【基于Qt5仿音乐播放器(六)】——细节打磨与总结
qt·1024程序员节