lxml.etree.parse()在utf-16文件中生成字符串为& #xxxx;我怎样才能将其转换回来?
在Web浏览器中打开输出文件很好。但是我仍然需要输出文件中的常规字符串。
示例文件:
<?xml version="1.0" encoding="UTF-16"?>
<?xml-stylesheet type="text/xsl" href="xxx.xsl"?>
<TEI.2>
<teiHeader></teiHeader>
<text>
<front></front>
<body>
<p rend="chapter">อธิกรณปจฺจยกถาวณฺณนา</p>
<p rend="bodytext" n="285"><hi rend="paranum">๒๘๕</hi><hi rend="dot">.</hi> <hi rend="bold">วิวาทาธิกรณมฺหา</hi>ติ ‘‘อธมฺมํ ‘ธโมฺม’ติ ทีเปตี’’ติอาทินยปฺปวตฺตา อฎฺฐารสเภทกรวตฺถุนิสฺสิตา วิวาทาธิกรณมฺหาฯ</p>
</body>
<back></back>
</text>
</TEI.2>
代码:
#coding:utf8
import lxml.etree as ET
xml_filename="example.xml"
dom = ET.parse(xml_filename)
print ET.tostring(dom, pretty_print=True))
示例输出:
<?xml-stylesheet type="text/xsl" href="xxx.xsl"?><TEI.2>
<teiHeader/>
<text>
<front/>
<body>
<p rend="chapter">ทุกมาติกาปทวณฺณนา</p>
</body>
<back/>
</text>
</TEI.2>
答案 0 :(得分:1)
使用 tostring 时需要指定编码:
dIn [2]: !cat "test.xml"
��<?xml version="1.0" encoding="UTF-16"?>
<?xml-stylesheet type="text/xsl" href="xxx.xsl"?>
<TEI.2>
<teiHeader></teiHeader>
<text>
<front></front>
<body>
<p rend="chapter">-4#"2':2</p>
<p rend="bodytext" n="285"><hi rend="paranum">RXU</hi><hi rend="dot">.</hi> <hi rend="bold">'4'224#!:+2</hi>4 -!:!M B!:! 4 5@5 4-24":':2 -:2#*@ #':84*:*42 '4'224#!:+2/</p>
</body>
<back></back>
</text>
</TEI.2>
In [3]: import lxml.etree as ET
In [4]: xml_filename = "test.xml"
In [5]: dom = ET.parse(xml_filename)
UTF-16:
In [6]: print ET.tostring(dom, pretty_print=True, encoding="utf-16")
��<?xml version='1.0' encoding='utf-16'?>
<?xml-stylesheet type="text/xsl" href="xxx.xsl"?>
<TEI.2>
<teiHeader/>
<text>
<front/>
<body>
<p rend="chapter">-4#"2':2</p>
<p rend="bodytext" n="285"><hi rend="paranum">RXU</hi><hi rend="dot">.</hi> <hi rend="bold">'4'224#!:+2</hi>4 -!:!M B!:! 4 5@5 4-24":':2 -:2#*@ #':84*:*42 '4'224#!:+2/</p>
</body>
<back/>
</text>
</TEI.2>
UTF-8:
In [7]: print ET.tostring(dom, pretty_print=True, encoding="utf-8")
<?xml-stylesheet type="text/xsl" href="xxx.xsl"?>
<TEI.2>
<teiHeader/>
<text>
<front/>
<body>
<p rend="chapter">อธิกรณปจฺจยกถาวณฺณนา</p>
<p rend="bodytext" n="285"><hi rend="paranum">๒๘๕</hi><hi rend="dot">.</hi> <hi rend="bold">วิวาทาธิกรณมฺหา</hi>ติ ‘‘อธมฺมํ ‘ธโมฺม’ติ ทีเปตี’’ติอาทินยปฺปวตฺตา อฎฺฐารสเภทกรวตฺถุนิสฺสิตา วิวาทาธิกรณมฺหาฯ</p>
</body>
<back/>
</text>
</TEI.2>
ASCII(默认):
In [8]: print ET.tostring(dom, pretty_print=True, encoding="ascii")
<?xml-stylesheet type="text/xsl" href="xxx.xsl"?>
<TEI.2>
<teiHeader/>
<text>
<front/>
<body>
<p rend="chapter">อธิกรณปจฺจยกถาวณฺณนา</p>
<p rend="bodytext" n="285"><hi rend="paranum">๒๘๕</hi><hi rend="dot">.</hi> <hi rend="bold">วิวาทาธิกรณมฺหา</hi>ติ ‘‘อธมฺมํ ‘ธโมฺม’ติ ทีเปตี’’ติอาทินยปฺปวตฺตา อฎฺฐารสเภทกรวตฺถุนิสฺสิตา วิวาทาธิกรณมฺหาฯ</p>
</body>
<back/>
</text>
</TEI.2>