导言


在这里插入图片描述
如上所示,在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
在这里插入图片描述
如上所示,在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、效果

在这里插入图片描述

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐