pyqt5 QTextEdit Windows 10 ASCII 符号

Posted

技术标签:

【中文标题】pyqt5 QTextEdit Windows 10 ASCII 符号【英文标题】:pyqt5 QTextEdit Windows 10 ASCII symbols 【发布时间】:2020-03-10 12:27:17 【问题描述】:

我使用 PyQt5 和 QTextEdit 小部件。我想从文件中获取纯文本并在 QTextEdit 中显示。这是我在文本文件中的内容

这就是我初始化 QTextEdit 的方式

self.info_text_edit.setPalette(palette)
font = QtGui.QFont()
font.setFamily("Courier")
font.setPointSize(10)
font.setStyleStrategy(QtGui.QFont.NoAntialias)
self.info_text_edit.setFont(font)
self.info_text_edit.setLineWrapMode(QtWidgets.QTextEdit.WidgetWidth)
self.info_text_edit.setReadOnly(True)

然后添加一个我刚刚做的文本

self.info_text_edit.append(str(msg))

在 Linux 上使用这种方法 - 一切正常。但这就是我在 Windows 上看到的结果

【问题讨论】:

缺少的是您写入此 TextEdit 的确切文本。这不只是使用错误编码的情况——比如 UTF-8 吗?以 UTF-8 编码的 Solid Black Block U+2588 是 0xE2 0x96 0x88â–ˆ(对于我的系统;实际的 3 字符显示取决于您的活动 Windows 代码页)。 @usr2564301 对于这种情况 - 正确。但可能有任何字符 当然它们也会以同样的方式被破坏。但是如何以及为什么,我们无法判断您是否不帮助我们帮助您。 @usr2564301 我在第一张图片中看到的是正确的。我想在我的 QTextEdit 中看到同样的内容 我明白了。 msg 中有什么,为什么需要转换为 str(如果它还不是字符串)?这似乎是原因。这就是我想知道的。 【参考方案1】:

编码\解码出错..

当我将msg 写入文件时,我应该执行以下操作:

import platform
if platform.system() == "Linux":
    msg = str(msg)
elif platform.system() == "Windows":
    msg = str(msg).encode("utf-8").decode('cp1251')

然后当我从文件中读取msg 时,我应该这样做:

import platform
if platform.system() == "Linux":
    self.info_text_edit.append(str(msg))
elif platform.system() == "Windows":
    self.info_text_edit.append(str(msg).encode('cp1251').decode('utf-8'))

【讨论】:

以上是关于pyqt5 QTextEdit Windows 10 ASCII 符号的主要内容,如果未能解决你的问题,请参考以下文章

python pyqt5 QTextEdit 多行文本框

无法在 Pyqt5 中更改 qtextedit 的背景边框,有啥建议吗?

PyQt5 从主模块外部实时登录 QTextedit

PyQt5总结--index_windows

PyQt5 控件学习(一个一个学习之QPlainTextEdit)

pyqt5-QPlainTextEdit普通文本