XML 인코딩 및 DOM 인터페이스 메서드

이 문서에서는 XML 인코딩 및 DOM 인터페이스 메서드에 대해 설명합니다.

원래 제품 버전: 확장 가능한 태그 언어
원래 KB 번호: 275883

요약

XML(Extensible Markup Language) 데이터의 주요 이점 중 하나는 독립적인 플랫폼이라는 것입니다. 그러나 서로 다른 플랫폼 간에 XML 데이터를 적절하게 전송하려면 올바른 인코딩을 지정해야 합니다. XML 데이터를 인코딩하는 방법 백서에서는 일반적인 XML 인코딩 문제를 자세히 다룹니다. XML 데이터를 인코딩하는 방법.

대부분의 시나리오에서 XML 인코딩 오류는 MSXML(XML 파서) 메서드 및 인터페이스의 다양한 기본 인코딩 설정에서 발생합니다. 이러한 기본 설정을 명확하게 이해하면 인코딩 오류를 방지하는 데 도움이 됩니다.

XML 인코딩

MSXML은 인터넷 Explorer 지원하는 모든 인코딩을 지원합니다. 인터넷 Explorer 지원은 컴퓨터에 설치된 언어 팩에 따라 달라집니다. 이 정보는 레지스트리 키 HKEY_CLASSES_ROOT\MIME\Database\Charset아래에 저장됩니다.

MSXML은 다음과 같은 인코딩을 기본적으로 지원합니다.

UTF-8
UTF-16
UCS-2
UCS-4
ISO-10646-UCS-2
UNICODE-1-1-UTF-8
UNICODE-2-0-UTF-16
UNICODE-2-0-UTF-8
It also recognizes (internally using the WideCharToMultibyte API function for mappings) the following encodings:
US-ASCII
ISO-8859-1
ISO-8859-2
ISO-8859-3
ISO-8859-4
ISO-8859-5
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
WINDOWS-1250
WINDOWS-1251
WINDOWS-1252
WINDOWS-1253
WINDOWS-1254
WINDOWS-1255
WINDOWS-1256
WINDOWS-1257
WINDOWS-1258

데이터에 대한 인코딩을 지정하는 적절한 위치는 XML 선언입니다. 예를 들어 데이터가 표준으로 ISO-8859-1 인코딩된 경우 다음과 같이 지정할 수 있습니다.

<?xml version="1.0" encoding="ISO-8859-1"?>

이 정보가 없으면 XML 파일의 시작 부분에 BOM(UNICODE 바이트 순서 표시)이 있는지 여부에 따라 기본 인코딩은 UTF-8 또는 UTF-16입니다. 파일이 유니코드 바이트 순서 표시(0xFF 0xFE) 또는 (0xFE 0xFF)로 시작하는 경우 문서는 UTF-16 인코딩으로 간주됩니다. 그렇지 않으면 UTF-8에 있습니다. 인터페이스의 IXMLDOMDocument Save 메서드는 문서의 원래 인코딩을 유지 관리합니다. 이 메서드의 기본값은 UTF-8입니다.

MSXML DOM 오류

XML DOM(문서 개체 모델) 인터페이스 메서드에서 반환되는 두 가지 일반적인 오류는 다음과 같습니다.

  • 잘못된 문자가 텍스트 콘텐츠에서 발견되었습니다.

  • 현재 인코딩에서 지원되지 않는 지정된 인코딩으로 전환합니다.

인터페이스의 load 메서드를 IXMLDOMDocument 사용하면 일반적으로 다음 조건에서 이러한 오류가 발생합니다.

  • 인코딩을 지정하지 않고 XML 파일의 시작 부분에 바이트 순서 표시를 찾을 수 없으며 데이터에 특수 문자가 포함되어 있습니다.

  • 지정된 인코딩이 XML 데이터의 실제 인코딩과 일치하지 않습니다. 기본 인코딩을 수락하는 대신 항상 XML 선언 내에서 올바른 인코딩을 지정하는 것이 좋습니다.

MSXML 파서 버전 2.5, 2.5 SP1 및 2.6 loadXML 을 사용하면 의 IXMLDOMDocument 메서드는 UTF-16 또는 UCS-2로 인코딩된 데이터만 로드할 수 있습니다. 다른 인코딩 형식으로 인코딩된 XML 데이터를 로드하려고 시도하면 다음 오류가 발생합니다.

현재 인코딩에서 지원되지 않는 지정된 인코딩으로 전환합니다. MSXML 3.0(Msxml3.dll)이 릴리스되면 이 제한이 제거되고 다음 코드가 오류 없이 실행됩니다.

hr = pXMLDoc->loadXML("<?xml version=\"1.0\" encoding=\"UTF-8\"?><tag1>Abcdef</tag1>");

참고

인터페이스의 IXMLDOMDocument xml 속성은 XML 데이터를 UTF-16으로 인코딩되었지만 처음에는 바이트 순서 표시가 없는 상태로 기록합니다. 이로 인해 인코딩 문제가 발생할 수 있습니다.

XML 인코딩 정보가 다음과 같이 지정된 XSL 또는 XSLT 파일을 사용하여 인터페이스의 IXMLDOMNode 메서드를 호출 transformNode 할 때 이러한 오류가 발생할 수도 있습니다.

<xsl:output method="xml" encoding="UTF-8" />

메서드는 transformNode 정의에 따라 UTF-16으로 인코딩된 데이터인 BSTR을 반환합니다. 인코딩을 유지하는 더 좋은 방법은 메서드를 호출 transformNodeToObject 하고 결과를 스트림 또는 새 XML 문서에 저장한 다음 저장하는 것입니다.

참조

System.Xml 네임스페이스