2013-06-10 2 views

답변

6

내가 알 수있는 한 U+001A은 유니 코드의 레거시 문자입니다. 그 존재의 유일한 이유는 substitute character으로 "ASCII"으로 이미 정의되었다는 것입니다 ("... 잘못되었거나 잘못되었거나 특정 장치에서 표시 할 수없는 문자 대신 사용됩니다."). 문자 스트림을 끝내기 위해 때때로 사용되기도했습니다 (아마도 문제의 일반적인 원인 일 것입니다).

그 기능은 U+FFFD REPLACEMENT CHARACTER에 의해 계승됩니다.

11

그건 Ctrl + Z 제어 코드입니다. 그것은 Windows에서 다소 특별하며 CP/M에서 상속받은 DOS에서 상속받습니다. 유닉스에서 Ctrl + D를 사용하는 것과 비슷한 방식으로 레거시 사용을 텍스트 끝 마커로 사용했습니다.

오류 메시지에서 오류 인코딩을 보거나 실패한 인코딩 변환의 대체 문자로 사용하는 것은 매우 드뭅니다. 코드를 다시 한 번 확인하고 U + 003F 또는 U + FFFD가 아닌 일반적인 인코딩 대체 문자인지 확인하십시오. 아니면 당신이 다루고있는 특정 코드의 단순한 특질입니다.

20

U + 001A는 유니 코드 표준에서 SUBSTITUTE라는 이름을 가진 제어 문자로 정의되며 다음과 같은 특징을 가진 그룹에 속합니다 : 표준의 chapter 16에 "65 개의 코드 포인트가 유니 코드 표준에 따로 설정되어 있습니다 C0 및 ISO/IEC 2022 프레임 워크에서 정의 된 C1 제어 코드와의 호환성을 위해 [...] 유니 코드 표준은 이러한 코드 포인트의 완전한 상호 교환을 제공하며 의미를 더하거나 뺍니다. 제어 코드의 의미는 일반적으로 사용되는 응용 프로그램에 의해 결정됩니다. 그러나 특정 응용 용도의 부재들은 ISO/IEC에서 6429 지정된 제어 기능 의미에 따라 해석 될 수있다. 1992 "ISO 6429

효과적으로을 갖는 것으로이 코드를 언급 ECMA 48, 동등 짧은 이름 SUB도 다음과 같이 정의합니다. "SUB는 유효하지 않거나 오류가있는 문자 대신 사용됩니다. SUB는 자동 수단으로 소개됩니다. "이것은 definition of this control code in Ascii을 반영합니다.

따라서 일반적으로 U + 001A는 문자 인코딩에서 해석이없는 바이트의 존재와 같은 문자 수준 데이터 오류를 나타내는 데 사용할 수 있습니다. 느슨하게 말해서, 그것은 "나쁜 문자 데이터"를 의미 할 것이지만,보다 적절하게 "데이터를 문자로 해석하려고 할 때 잘못된 데이터"를 의미합니다. 그러나 유니 코드의 경우 U + FFFD REPLACEMENT CHARACTER가 더 적합합니다. 특정 유니 코드 의미론을 사용하기 때문입니다.

질문에 "xml"태그가 지정되었으므로 XML 1.0에서 U + 001A는 금지 된 내용으로 2.2 Characters이라는 것을 알아야합니다. 주석 "서로 게이트 블록, FFFE 및 FFFF를 제외한 모든 유니 코드 문자"는 오해의 소지가 있습니다 (주석은 비 규범 적입니다). U + 001A는 유니 코드 문자이지만 그래픽 문자가 아니며 유니 코드 표준에 그 효과가 정의되어 있지 않습니다.

+0

libxml이 유효한 utf8 문자를 거부하는 이유를 고맙게 생각합니다. 왜 내가 그걸 얻었는지 모르지만 적어도 지금은 그 문제가 무엇인지 이해할 수 있습니다 ... – mcfedr