私はバイナリファイルに取り組んでいます。このバイナリ ファイル内で、UTF-16 XML (リトルエンディアン) ファイルと思われるものを抽出できます。
データを抽出し、コンソール (debian/jessie amd64 を実行) からダンプしようとすると、次のようになります。
$ xmllint --format D5905822-DFF9-7944-9CFE-258264B8162E.UNK
D5905822-DFF9-7944-9CFE-258264B8162E.UNK:1: parser error : Char 0x0 out of allowed range
<
^
D5905822-DFF9-7944-9CFE-258264B8162E.UNK:1: parser error : StartTag: invalid element name
<
^
xmllint の man ページから助けになるものが見つからなかったので、ネットから UTF-16 リトル エンディアン ファイルをダウンロードしました。最初の行 (エンコーディング) のみを保持するために、実際の XML データを削除しました。
$ cat header
��<?xml version="1.0" encoding="UTF-16"?>
$ hexdump header
0000000 feff 003c 003f 0078 006d 006c 0020 0076
0000010 0065 0072 0073 0069 006f 006e 003d 0022
0000020 0031 002e 0030 0022 0020 0065 006e 0063
0000030 006f 0064 0069 006e 0067 003d 0022 0055
0000040 0054 0046 002d 0031 0036 0022 003f 003e
0000050 000d 000a
0000054
これで、xmlling を適切に使用できるようになりました。
$ cat header D5905822-DFF9-7944-9CFE-258264B8162E.UNK > bla.xml
$ xmllint --format bla.xml
��<?xml version="1.0" encoding="UTF-16"?>
<InteractiveMeasurement>
<InteractiveMeasurementRecord ElementUniqueName="f0c9b1c6-9a5c-40cd-8303-e507bb539cdc" IsValid="true">
[...]
他にもっと簡単な解決策はありませんか?UTF-16 リトル エンディアン XML ファイルを読み取るのがこれほど複雑なのはなぜですか?