2010-03-16 6 views
1

우리는 수천 개의 text/html 파일을 가진 CMS를 가지고 있습니다. 사용자가 다양한 문자 인코딩 (utf-8, utf-8 w BOM, windows 1252, iso-8859-1)을 사용하여 text/html 파일을 업로드하고있는 것으로 나타났습니다.텍스트 콘텐츠를 Java에서 UTF 8로 정규화하는 방법

이러한 파일을 읽고 응답에 기록하면 CMS의 프레임 워크는 응답의 content-type 속성에서 charset = UTF-8을 강제합니다.

따라서 "UTF-8"문자 인코딩에서 올바른 문자 변환이없는 경우 UTF-8이 아닌 모든 콘텐츠가 사용자에게 표시됩니다 (꺾쇠 괄호 문자, 검은 색 다이아몬드 등). 또한, charset을 나타내는 이러한 문서에 첨부 된 메타 데이터가 없습니다. 필자가 알고있는 한, charset이 무엇인지 알 수있는 유일한 방법은 텍스트 렌더링 응용 프로그램 (Firefox, Notepadd ++ 등)에서 해당 문자를보고 "look "콘텐츠가"보이는 것 "인지 확인하십시오.

알 수없는 인코딩 파일을 자동으로/지능적으로 UTF-8로 변환하는 방법을 아는 사람이 있습니까? 나는 이것이 통계적 모델링으로 수행 될 수 있다는 것을 읽었지만 내 머리 위에 무엇이 있는지를 알았다.

문제를 가장 잘 해결하는 방법에 대해 생각해보십시오.

감사합니다.

+0

관련 질문 : http://stackoverflow.com/questions/774075/character-encoding-detection-algorithm 및 http://stackoverflow.com/questions/499010/java-how-to-determine-the-correct- charset-of-stream-of-stream – BalusC

답변

1

UTF-8로 디코딩 해보세요. 이것이 실패하면 \x92을 찾아 CP1252로 디코드하십시오. 그렇지 않으면 Latin-1로 디코드합니다.

+0

UTF-8이 유효하지 않은 경우 바로 cp1252로 이동할 수 있습니다. 그것은 단지'\ x80F '에서'\ x9F'까지의 차이점을 만들어 낼 뿐이지 만 ISO-8859-1 문자를 사용하는 사람은 거의 쓸모가 없습니다. – bobince

+0

왜 어쨌든 * cp1252 확장 문자 중 하나만 확인 하시겠습니까? 텍스트에 curly * double * 따옴표 ('\ x93','\ x94')가 포함되어 있지만 둥근 작은 따옴표 ('\ x91', \ x92')가 없으면 어떻게 될까요? 그러나 @bobince 씨는 유효한 ISO-8859-1이라면 그것이 유효한 cp1252라고 안전하게 가정 할 수 있습니다. –

+0

@bobince, Alan : cp1251과 ISO-8859-15 사이에는 훨씬 더 흥미로운 구분이 있는데, 이는 "ISO-8859-1"문서 중 일부가 실제로 무엇인지에 관한 것입니다. 유로화는 요즘과는 전혀 관련이 없습니다 . –

0

가 알 수있는 방법이 없습니다 사용할 수 있습니다. 바이트 순서 63 61 66 C3 A9는 windows-1252의 경우 "café", IBM437의 경우 "cafery⌐"또는 UTF-8의 "café"로 동일하게 유효합니다. 마지막은 통계적으로 더 가능성이 높습니다.

통계적 방법을 다루고 싶지 않다면, 많은 시간을 할애하는 접근법은 UTF-8처럼 보이고 그 밖의 것이 windows-1252에 있다고 가정하는 것입니다.

또는 UTF-16이 가능한 경우 파일의 시작 부분에서 FE FF 또는 FF FE를 찾으십시오.