QTextBrowser不能正确显示反斜杠字符

2024-06-02 15:56:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个小部件,它将以一种非常格式化的方式显示XML字符串。为此,我使用了QXmlStreamReaderQXmlStreamWriter(基于Format XML file in c++ or Qt的答案),并将文本输入到QTextBrowser

message = "<person><name>John</name><surname>Smith</surname><hobbies><sport>football</sport><sport>tenis</sport><activity>dancing</activity></hobbies></person>"
byteArray = QByteArray()
xmlReader = QXmlStreamReader(message)
xmlWriter = QXmlStreamWriter(byteArray)
xmlWriter.setAutoFormatting(True)
while (not xmlReader.atEnd()):
    xmlReader.readNext();
    if (not xmlReader.isWhitespace()):
        xmlWriter.writeCurrentToken(xmlReader)
prettyMessage = str(byteArray.data())
textBrowser.setText(prettyMessage)

但结果文本不会将\n转换为新行:

enter image description here

如果我手动输入一个包含\n的字符串,它们将转换为新行:

textBrowser.setText("1\n2\n3\n4")

enter image description here

我已经检查了byteArray的确切内容,以确保\n作为一个字符传递,而不是作为两个单独的“\”和“n”字符传递:

for i in range(0, byteArray.size()):
    sys.stdout.write(byteArray.at(i))

按预期打印XML字符串:

<?xml version="1.0" encoding="UTF-8"?>
<person>
    <name>John</name>
    <surname>Smith</surname>
    <hobbies>
        <sport>football</sport>
        <sport>tenis</sport>
        <activity>dancing</activity>
    </hobbies>
</person>

我正在使用python3.6和PyQt5


Tags: 字符串namein文本xmlactivitysurnameperson
1条回答
网友
1楼 · 发布于 2024-06-02 15:56:03

您需要解码QByteArray中的数据。这可以通过使用QTextStream来完成,这样您就可以轻松地设置正确的编解码器:

    byteArray = QByteArray()
    xmlReader = QXmlStreamReader(message)
    xmlWriter = QXmlStreamWriter(byteArray)
    xmlWriter.setAutoFormatting(True)
    while (not xmlReader.atEnd()):
        xmlReader.readNext();
        if (not xmlReader.isWhitespace()):
            xmlWriter.writeCurrentToken(xmlReader)

    stream = QTextStream(byteArray)
    stream.setCodec(xmlWriter.codec())
    textBrowser.setText(stream.readAll())

相关问题 更多 >