2009-05-16 3 views
0

Java에서 DOM API를 사용하여 텍스트의 "특정"문자를 처리 할 때 문제가 있습니다. 파일은 XML 형식입니다. XML에서 앰퍼샌드 (&) 기호가있는 상황 (그리고 더 많은 문자가 < 및>과 같은)이 이전 게시물에서 들었습니다. 게시물은 다음과 같습니다. Special characters in XML files - processing with the DOM API텍스트의 "특정"문자 처리 문제 (XML 파서를 사용하는 Java의 경우)

그러나 독일어와 프랑스어의 특정 문자와 같은 다른 특수 문자는 어떻게해야합니까? 예를 들어 XML 문서의 텍스트 요소에 "façade"라는 단어가 있습니다. 그러나 문자 "ç"의 위치가 손상된 것처럼 보입니다. Linux에서 vim 편집기로 파일을 열면 "fa^Zade"처럼 보입니다. 다른 편집기에서 .txt 또는 .xml 파일로 열면 "ç"의 자리는 작은 빈 사각형 (또는 빈 공간)처럼 보입니다. 이것은 독일어 움라우트와 다른 언어의 다른 "특별한"기호에서도 마찬가지입니다. XML 파서로 파일을 처리하려고 할 때 문제가 발생합니다 (구문 분석 오류가 발생합니다). 이것이 인코딩 문제라고 생각합니다. XML 파일의 헤더에서 encoding = "UTF-8"을 사용하고 있습니다. 나는 그것을 (즉, "유니 코드"또는 다른 것으로) 변경하려했지만 도움이되지 않습니다.

어떻게 이러한 특수 문자를 인식 할 수 있습니까? 특수 인코딩을 사용해야합니까? 2 문자 또는 3 문자 인 경우, 내가 앰퍼샌드 (&) 기호 (나는 을 &amp;으로 변환)로 수행 한 것처럼 DOM API로 처리하기 전에이를 대체 할 수있었습니다. 그러나, 그것들은 많이 있고, 잠재적으로 어떤 "특별한"상징이 될 수 있습니다. 데이터가 저장되는 방식에서 문제가 발생합니까? 예를 들어, 저장 프로세스 중에 특수 문자 인코딩 (?)이 사용되었으므로 이제 문자가 인식됩니다 (?). (나는 데이터를 직접 저장하지 않았다).
감사합니다. 그들은 내가 확실히 알고 두 개 또는 세 개의 문자 인 경우

답변

1

, 나는 자바에서 DOM API를 내가 앰퍼샌드 (&) 기호로 수행 한 방법을 처리하기 전에 그들을 대체 수 있었다 (나는 변환 한 & to &) 그러나, 그들은 많으며 잠재적으로 임의의 "특별한"기호가 될 수 있습니다.

가능한 모든 입력을 예상 할 필요가 없습니다. 대신, 각 엔티티를 NCR 또는 숫자 문자 참조로 간단히 변환하십시오. 예 : &#x20AC;은 유로 기호 & # x20AC;에 대한 NCR입니다. 이것은 20AC이 유로 기호에 대한 16 진 유니 코드 참조임을 의미합니다.

+0

감사합니다. 기호가 무엇인지 알 수 있습니다.이 장소에서 독일어 또는 프랑스어 문자 또는 유로화가 사용되었다는 것을 알고 있으면. 그러나 내가 처리하고있는 본문은 다른 사람들 (다른 국적의 사람들)이 쓴 것이며, 영어로 글을 쓸 때도 종종 언어의 일부 단어를 포함합니다. 또는 영어 이외의 문자로 구성된 일부 국제 단어. 이런 의미에서 나는 모든 것을 기대할 수 있으며, 나는이 문자들을 일반적으로 인식 할 수있는 방법이 있는지 알고 싶다. – user42155

+1

흠 - 당신이 설명하는 것을이 방법이 생각하기 때문에 당신이 나를 오해했을 수도 있습니다. 입력을 문자 스트림으로 간주하십시오. 당신이해야 할 일은 각 캐릭터를 검사하고 그것이 "특별한"것인지 아닌지를 결정하는 것입니다. 한 가지 방법은 예를 들어 16 진수 값이 0xFF보다 큰 모든 유니 코드 문자를 특수 문자로 처리하여 NCR로 인코딩하는 것입니다. –

1

이것은 XML에서는 문제가되지 않지만 인코딩 문제는 아닙니다. XML은 UTF-8과 Latin-1을 모두 처리 할 수 ​​있습니다. 그러나 당신은 입력 인코딩을 알고 있어야하거나 올바른 인코딩 속성을 사용하는 XML 선언을 가진 독자가 아닌 입력 스트림을 사용해야합니다.

정말 원본이 손상되지 않았습니까? 어떤 인코딩입니까? 첫 줄에 선언의 XML 인코딩 속성이 올바 릅니까?^Z는 UTF-8 인코딩처럼 보이지 않습니다!

0

인코딩 = "UTF-8"이 올바른 방법 인 것 같습니다. 그러면 이러한 문자를 다르게 취급해서는 안됩니다. 당신은 '인코딩 = "UTF-8"'을 사용하고있는 XML 파일의 헤더에서 문자 데이터를 UTF-8로 쓰고 있다고 말했습니까?

정력에서는 "ga"를 사용하여 커서 아래에있는 문자의 코드를 표시 할 수 있습니다. 이는 디버깅에 도움이됩니다.

관련 문제