gpt4 book ai didi

xml - Linux 上汉字的 XML UTF-8/ISO-8859-1 编码问题

转载 作者:太空宇宙 更新时间:2023-11-04 09:10:19 26 4
gpt4 key购买 nike

我在 Linux 上有一个 XML 文件(response.xml),我正在尝试使用 awk/sed/grep 等进行解析。XML 文件包含一些汉字,我正在尝试获取 FunCode 的值

<FunCode>9000</FunCode>
  1. 在 Linux 上使用 viewcat:

    <?xml version='1.0' encoding='UTF-8'?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
    <ns31:UploadInboundResponseElement xmlns:ns31="http://www.example.com/schema/xyzWS">
    <ns31:UploadInboundResult>&lt;?xml version="1.0" encodi®æå&lt;/Remark>&lt;/Head>&lt;/ATKCST>>unCode>9000&lt;/FunCode>&lt;Remark>æ¥æ¶æ°æ
    </ns31:UploadInboundResult>
    </ns31:UploadInboundResponseElement>
    </soapenv:Body>
    </soapenv:Envelope>
  2. 在 Linux 上使用 file 命令:

    $ file -b --mime-encoding response.xml
    $ utf-8
  3. 在使用记事本的 Windows 上,文件如下所示。请注意,编码是 UTF-8:

    <?xml version='1.0' encoding='UTF-8'?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
    <ns31:UploadInboundResponseElement xmlns:ns31="http://www.example.com/schema/xyzWS">
    <ns31:UploadInboundResult>&lt;?xml version="1.0" encoding="UTF-8" ?>&lt;ATKCST>&lt;Head>&lt;FunCode>9000&lt;/FunCode>&lt;Remark>接收数据成功&lt;/Remark>&lt;/Head>&lt;/ATKCST></ns31:UploadInboundResult>
    </ns31:UploadInboundResponseElement>
    </soapenv:Body>
    </soapenv:Envelope>
  4. 但是,当我在 Windows 上使用任何 Web 浏览器打开文件时,它会显示此内容。请注意,编码是 ISO-8859-1:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
    <ns31:UploadInboundResponseElement xmlns:ns31="http://www.example.com/schema/xyzWS">
    <ns31:UploadInboundResult>
    <?xml version="1.0" encoding="UTF-8" ?>
    <ATKCST>
    <Head>
    <FunCode>9000</FunCode>
    <Remark>接收数据成功</Remark>
    </Head>
    </ATKCST>
    </ns31:UploadInboundResult>
    </ns31:UploadInboundResponseElement>
    </soapenv:Body>
    </soapenv:Envelope>

所以文件在浏览器中的格式正确,但我很困惑为什么 Linux 说文件是 UTF-8 编码的,而在浏览器中却显示为 ISO-8859-1。

仅仅是因为“encoding='UTF-8'”吗?

我的另一个(主要)问题是,在 Linux 上,我无法搜索和获取 FunCode 的值“9000”。

关于如何在 Linux 上格式化文件以便获取 FunCode 的值有什么想法吗?我尝试使用“iconv”,但这没有帮助。

最佳答案

您在 Linux 中看到的困惑很可能是由于终端配置错误造成的。鉴于您在记事本中看到的内容,您必须将 UploadInboundResult 解码为文本,将其重新解释为 XML,然后最终获取您的元素:

  $ xmlstarlet sel -T -N ns='http://www.example.com/schema/xyzWS' \
-t -v '//ns:UploadInboundResult' response.xml |
xmlstarlet sel -t -v '//FunCode' -n
9000

关于xml - Linux 上汉字的 XML UTF-8/ISO-8859-1 编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57664865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com