Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QTextBrowser不';不能正确显示反斜杠字符_Python_Xml_Pyqt_Pyqt5_Qbytearray - Fatal编程技术网

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

Python QTextBrowser不';不能正确显示反斜杠字符,python,xml,pyqt,pyqt5,qbytearray,Python,Xml,Pyqt,Pyqt5,Qbytearray,我正在创建一个小部件,它将以一种非常格式化的方式显示XML字符串。为此,我使用了QXmlStreamReader和QXmlStreamWriter(基于的答案),并将文本馈送到QTextBrowser: message = "<person><name>John</name><surname>Smith</surname><hobbies><sport>football</sport><spor

我正在创建一个小部件,它将以一种非常格式化的方式显示XML字符串。为此,我使用了
QXmlStreamReader
QXmlStreamWriter
(基于的答案),并将文本馈送到
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)

我已检查了
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一起使用

您需要解码
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())

stream.setCodec(xmlWriter.codec())
不是必需的。@SIMEL。如果xml编写器使用的编解码器与
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())