2011-12-23 2 views
1

Java HtmlUnit을 사용하여 샘플링 한 데이터를 처리하고 있습니다. 웹 페이지는 Windows-1252 인코딩을 사용했지만 페이지가 UTF-8로 인코딩 된 것처럼 검색되었습니다 (즉, HtmlUnit WebResponse 객체의 getContentAsString이 호출 된 경우 서버에 지정된 인코딩을 연기하는 대신 UTF-8 인코딩이 지정됨). 응답). 잘못 라벨링 된 UTF-8 문자 데이터에서 원래 Windows-1252 데이터를 재구성하기 위해이 과정을 취소 할 수있는 방법이 있습니까?데이터에서 Windows-1252 문자를 UTF-8로 잘못 복원했습니다.

이 주제에 대한 다른 대부분의 질문은 처음에 올바르게 인코딩 된 문자의 파일 유형을 식별하거나 하나의 스트림 유형을 다른 유형으로 변환하는 것과 관련이 있습니다. 여기서는 그렇지 않습니다. 필자는 iconv와 같은 유틸리티가 스트림이 원본 인코딩에서 올바르게 유지되기를 기대하기 때문에 작동하지 않는다고 생각합니다.

답변

3

아마도 그렇지 않습니다. Windows-1252로 인코딩 된 텍스트가 UTF-8로 오인되면 UTF-8이 해당 코드 포인트를 다루는 방식 때문에 모든 비 ASCII 코드 포인트가 손상됩니다. 매우 운이 좋고 모든 비 ASCII 코드 포인트가 순수한 기회에 의해 실제 유니 코드 코드 포인트로 변환되는 쌍 또는 삼중 항으로 올 경우에만 프로세스를 되돌릴 수 있습니다.

하지만 운이 좋지는 않을 것입니다.

+1

손상된 코드 포인트가 저장되는 방법에 따라 달라집니다. HtmlUnit에 대한 경험이 없지만 불가능하다고 결론 내리기 전에 결과의 일부 16 진수를보고 싶습니다. –

+0

불가능할 수도 있습니다. * (가정) * utf-8의 디코딩을 담당하는 엔터티가 기발한 경우 utf-8 코드 포인트를 "있는 그대로"2 진법으로 유지할 수 있지만 이는 매우 나쁜 디코더가됩니다. 내 생각 엔 결과가 상자 나 물음표로 가득 차 있다는 것입니다 ... –

+0

HtmlUnit은 Java의 인코딩을 사용하며 (icu4j와는 달리) 특별한 것은 없습니다. 따라서 캐릭터 세트의 mangling은 자바의 rt 라이브러리의 악의에 의존 할 것이다. 해당 정보를 제공하는 사람이 있다면 더 많은 제안을받을 수 있습니다. – benmac