Xerces의 Sax Parser를 사용하여 XML 파일을 구문 분석하고 있습니다.
XML 선언이 <?xml version="1.0" encoding="UTF-8"?>
필요합니까?
Xerces의 Sax Parser를 사용하여 XML 파일을 구문 분석하고 있습니다.
XML 선언이 <?xml version="1.0" encoding="UTF-8"?>
필요합니까?
답변:
XML 1.0에서 XML 선언 은 선택 사항 입니다. XML 1.0 권장 사항의 섹션 2.8을 참조하십시오 . 여기서 "사용해야합니다"라고 표시되어 있습니다. 이는 권장되지만 필수는 아님을 의미합니다. 그러나 XML 1.1에서는 선언이 필수 입니다. XML 1.1 권장 사항의 섹션 2.8을 참조하십시오 . 여기서 "MUST"를 사용해야합니다. 것을 심지어 상태에가는 경우 선언이 존재하지 않는, 즉 자동으로 문서가 XML 1.0 문서입니다 의미한다.
에 있습니다 선언 XMLencoding
및 standalone
모두 선택 사항입니다. 만은 version
필수입니다. 또한 속성이 아니므로 존재하는 경우 순서대로 있어야합니다 : version
, any encoding
, any standalone
.
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
이러한 방식으로 인코딩을 지정하지 않으면 XML 파서가 사용되는 인코딩을 추측합니다. XML 1.0 권장 사항은 문자 인코딩을 자동으로 감지 할 수있는 한 가지 방법을 설명합니다 . 실제로 입력이 UTF-8, UTF-16 또는 US-ASCII로 인코딩 된 경우 이는 큰 문제가 아닙니다. US-ASCII 범위 (예 : ISO 8859-1)를 벗어난 문자를 사용하는 8 비트 인코딩이 발견되면 자동 감지가 작동하지 않습니다. 가능하면 생성하지 마십시오.
는 standalone
XML 문서가 올바르게 DTD없이 여부를 처리 할 수 있는지 여부를 나타냅니다. 사람들은 거의 사용하지 않습니다. 요즘에는 DTD없이 정보가 누락 된 XML 형식을 디자인하는 것은 좋지 않습니다.
최신 정보:
"프롤로그 오류 / 잘못된 utf-8 인코딩"오류는 파서가 파일 내에서 찾은 실제 데이터가 XML 선언에 명시된 인코딩과 일치하지 않음을 나타냅니다. 또는 파일 내부의 데이터가 자동 감지 된 인코딩과 일치하지 않는 경우도 있습니다.
파일에 BOM (byte-order-mark)이 포함되어 있으므로 UTF-16 인코딩이어야합니다. 나는 당신의 선언 <?xml version="1.0" encoding="UTF-8"?>
이 파일이 메모장에 의해 UTF-16으로 변경되었을 때 분명히 잘못된 것이라고 생각한다고 생각합니다 . 간단한 해결책은를 제거 encoding
하고 간단히 <?xml version="1.0"?>
. 편집 할 수도 encoding="UTF-16"
있지만 원래 파일 (UTF-16이 아님) 또는 파일이 어떻게 든 UTF-8 또는 다른 인코딩으로 다시 변경되면 잘못된 것입니다.
BOM을 제거하려고 시도하지 마십시오. 이것이 문제의 원인이 아닙니다. 메모장이나 워드 패드를 사용하여 XML을 편집하는 것이 진짜 문제입니다!
XML 선언은 선택 사항이므로 XML이 없으면 XML이 잘 구성됩니다. 그러나 특히 사용 된 인코딩에 대해 파서가 잘못된 가정을하지 않도록 사용하는 것이 좋습니다.