У меня есть XML-файл (response.xml) в Linux, который я пытаюсь проанализировать с помощью awk / sed / grep и т. Д. XML-файл содержит некоторые китайские символы, и я пытаюсь получить значение FunCode
<FunCode>9000</FunCode>
Использование
view
илиcat
в Linux:<?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><?xml version="1.0" encodi®æå</Remark></Head></ATKCST>>unCode>9000</FunCode><Remark>æ¥æ¶æ°æ </ns31:UploadInboundResult> </ns31:UploadInboundResponseElement> </soapenv:Body> </soapenv:Envelope>
Используя команду
file
в Linux:$ file -b --mime-encoding response.xml $ utf-8
В 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><?xml version="1.0" encoding="UTF-8" ?><ATKCST><Head><FunCode>9000</FunCode><Remark>接收数据成功</Remark></Head></ATKCST></ns31:UploadInboundResult> </ns31:UploadInboundResponseElement> </soapenv:Body> </soapenv:Envelope>
Тем не менее, когда я открываю файл с помощью любого веб-браузера в Windows, он показывает это. Обратите внимание на кодировку 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 я не могу найти и получить значение «9000» для FunCode.
Есть идеи, как отформатировать файл в Linux, чтобы получить значение FunCode? Я пробовал использовать "iconv", но это не помогло.