2014-11-28 3 views
0

이진 파일을 만들고 있습니다. 이 바이너리 파일 내에서 UTF-16 XML (리틀 엔디안) 파일 인 것만 추출 할 수 있습니다. UTF-16 (리틀 엔디안) XML에서`xmllint` 사용하기

내가 데이터를 추출하고, (데비안/제시의 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가의 사람 페이지에서 아무것도 찾을 수 없습니다

나를 돕기 위해, 그물로부터 UTF-16 리틀 엔디안 파일 (here)을 다운로드했습니다. 나는 첫 번째 라인 (인코딩) 유지하기 위해, 실제 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 파일을 읽는 것이 왜 이렇게 복잡한가요?

+1

'iconv -f utf-16 -t utf-8 Tomalak

답변

1

The XML C parser and toolkit of Gnome Encodings support이 동작은 의도적으로 설계된 것이며 저자는 왜 다른 사람이 원하는지 질문합니다. XMLLint는 출력 인코딩을위한 매개 변수를 제공하지만 입력에 대해서는 매개 변수를 제공하지 않습니다.

파서를 추가 인코딩으로 확장 할 수있는 것처럼 보이지만 기본 추론을 지나칠 수 없습니다.

관련 문제