2011-12-08 2 views
1

사람들이 모든 장소 (Word 문서가 대부분)에서 복사/붙여 넣기되는 일부 콘텐츠에서 생성되는 XML 문서가 있습니다.U + 001A가 포함 된 XML 문서의 인코딩

그것은 다음과 같습니다 : 난 항상 UTF-8 또는 iso-8859-1의 인코딩을 사용했지만, 지금은 누군가가 사라 졌어요 및 복사/유니 코드 문자 U+001A (0x1a) 붙여 넣기와 내가 찾을 수 없습니다

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <data> <![CDATA[ 
     (whatever was pasted) 
    ]]></data>   
</response> 

그것을 받아들이는 인코딩. XML 파일을 넣은 모든 항목 (예 : Firefox, Internet Explorer, XML Spy)은 사용 된 인코딩 종류에 관계없이 모두 유효하지 않다고 말합니다.

파일이 넘어지지 않게 할 수있는 인코딩이 있습니까? 아니면 하나씩 이러한 모든 문자를 스트립 할 필요가 있습니까?

답변

6

U + 001A는 XML 문서에서 유효한 문자가 아닙니다. the specification에 따라 문자의 유효 범위는 다음과 같습니다

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */ 
+0

나는 듣고 싶지 않았지만, 고마워. "고칠 것이 확실한"것이 또 다른 긴 하루로 바뀔 것입니다. –

1

미리 처리 원본 데이터, 인코딩 유니 코드 문자는 XML 문서를 직접 지원하지 않습니다. 예를 들어, HTML의 문자 인코딩을 사용 : 올바른 유니 코드 문자로 다시 HTML 인코딩을 변환 다시 읽을 때

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <data> <![CDATA[This is &#x1a; a test.]]></data>   
</response> 

당신은 데이터를 사후 처리해야합니다.

3

문자 U + 001A는 XML에서 금지 된 대부분의 (U + 001A를 포함하는) C0 컨트롤 영역에 있습니다. 누구나 그것을 의도적으로 입력하지는 않을 것입니다. 오히려 문자 코드 변환을 수행하고 기형 데이터 (예 : 소스 인코딩에서 정의 된 의미가없는 바이트)를 발견 할 때 소프트웨어에 의해 생성되었습니다. U + 001A (SUBSTITUTE) 문자는 이러한 용도로 사용됩니다. 내 quick reference to C0 Controls을 참조하십시오.

U + 001A를 생성 한 변환 (또는 다른 프로세스)을 추적하여 수정할 수 없다면 U + FFFD REPLACEMENT CHARACTER로 바꾸는 것이 좋습니다. 그것은 유니 코드 U + 001A와 같은 의미입니다. (물론 후자는 물론 유니 코드이기는하지만 많은 문맥에서는 허용되지 않습니다.) 그러나 글리프는 몇 가지 글꼴로만 존재하지만 눈에 보이는 글리프가 있습니다. 자세한 내용은 fileformat.info entry on U+FFFD을 확인하십시오.

요점은 U + 001A를 U + FFFD로 변경하면 데이터를 XML로 허용하고 문자 수준 데이터 오류에 대한 정보를 유지한다는 것입니다.

관련 문제