【问题标题】:Convert &#xxxx; to normal character?转换 &#xxxx;正常性格?
【发布时间】:2016-09-18 10:19:02
【问题描述】:

lxml.etree.parse() 在 utf-16 文件中生成字符串为 xxx;我怎样才能把它转换回来?

在网络浏览器中打开输出文件很好。但是我仍然需要输出文件中的常规字符串。

示例文件:

<?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">&#3607;&#3640;&#3585;&#3617;&#3634;&#3605;&#3636;&#3585;&#3634;&#3611;&#3607;&#3623;&#3603;&#3642;&#3603;&#3609;&#3634;</p>
</body>
<back/>
</text>
</TEI.2>

【问题讨论】:

  • 你的代码没有运行,我看不到你在哪里定义xsltnewdom
  • 对不起。我已经编辑了。
  • 现在我使用了stackoverflow.com/a/12614706/3529093,但出现错误:UnicodeEncodeError: 'ascii' codec can't encode characters in position 125-141: ordinal not in range(128)

标签: python html xml character-encoding lxml


【解决方案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">&#3629;&#3608;&#3636;&#3585;&#3619;&#3603;&#3611;&#3592;&#3642;&#3592;&#3618;&#3585;&#3606;&#3634;&#3623;&#3603;&#3642;&#3603;&#3609;&#3634;</p>

            <p rend="bodytext" n="285"><hi rend="paranum">&#3666;&#3672;&#3669;</hi><hi rend="dot">.</hi> <hi rend="bold">&#3623;&#3636;&#3623;&#3634;&#3607;&#3634;&#3608;&#3636;&#3585;&#3619;&#3603;&#3617;&#3642;&#3627;&#3634;</hi>&#3605;&#3636; &#8216;&#8216;&#3629;&#3608;&#3617;&#3642;&#3617;&#3661; &#8216;&#3608;&#3650;&#3617;&#3642;&#3617;&#8217;&#3605;&#3636; &#3607;&#3637;&#3648;&#3611;&#3605;&#3637;&#8217;&#8217;&#3605;&#3636;&#3629;&#3634;&#3607;&#3636;&#3609;&#3618;&#3611;&#3642;&#3611;&#3623;&#3605;&#3642;&#3605;&#3634; &#3629;&#3598;&#3642;&#3600;&#3634;&#3619;&#3626;&#3648;&#3616;&#3607;&#3585;&#3619;&#3623;&#3605;&#3642;&#3606;&#3640;&#3609;&#3636;&#3626;&#3642;&#3626;&#3636;&#3605;&#3634; &#3623;&#3636;&#3623;&#3634;&#3607;&#3634;&#3608;&#3636;&#3585;&#3619;&#3603;&#3617;&#3642;&#3627;&#3634;&#3631;</p>
        </body>
        <back/>
    </text>
</TEI.2>

【讨论】:

    猜你喜欢
    • 2013-08-21
    • 1970-01-01
    • 2013-03-19
    • 2018-08-03
    • 1970-01-01
    • 2018-10-30
    • 2017-07-26
    • 2020-01-06
    • 2015-02-16
    相关资源
    最近更新 更多