2017-11-01 2 views
0

텍스트 파일을 서버에 업로드하여 콘텐츠를 처리하는 JavaEE 응용 프로그램에서 작업하고 있습니다. 사용자의 텍스트 소스는 크게 다를 수 있으며 특히 인코딩이 다를 수 있습니다.업로드 된 텍스트 파일의 인코딩이 잘못되었습니다.

모든 것을 UTF-8로 변환하고 싶습니다. (지속성이오고 있습니다.)하지만 먼저 올바르게 읽어야합니다.

내가 InputStreamReader의 GetEncoding이() 메소드를 사용하고 있습니다 :

public void doThings(HttpServletRequest request) { 
    Part file = request.getPart("formfile"); 
    InputStreamReader isr = new InputStreamReader(file.getInputStream()); 

    // BUT THIS ALWAYS prints "UTF8" whatever the text file's encoding is : 
    System.out.println(isr.getEncoding()); 
} 

뭔가 다른 길을 가야하는 경우 실제로 앱을 나중에 데이터를 위로 잘게 스캐너 클래스와 구분 기호를 사용하기 때문에의 InputStream를 사용하지만, 나는 당신은 응용 프로그램, 분명히 UTF-8의 플랫폼에 그것을, 그렇지 않으면 기본값을 new InputStreamReader(file.getInputStream(), charsetOfFile);을 할 필요가있는 포인터

답변

2

을 위해 ... 어떤 방법으로 그것을

감사를 구속하고 있지 않다.

인코딩/문자 집합을 추출 할 수있는 확실한 방법이 없습니다. 헤더가 결정적이 아니기 때문에, part.getContentType()도 더 추측 할 수 있습니다. 어쩌면 charset이 첫 번째 지표가 될 수도 있습니다.

모든 브라우저가 ISO-8859-1을 Windows-1252로 포함하기 때문에 charset ISO-8859-1 (Latin-1)을 Windows-1252 (Windows Latin-1)로 바꿉니다.

Windows-1252도 좋은 기본값입니다 (ISO-8859-1이 HTTP 기본값이기도합니다).

파일 내용이 멀티 바이트 UTF-8 형식을 따르는 경우이를 사용하십시오. UTF-8 유효성 검사.

Charset detection은 일부 라이브러리에서 구현됩니다. 언어 검색을 사용하여 불완전한 자체 검색을 만들었습니다 (빈도 목록 별).

charset 감지의 경우 InputStreamReader가없는 이진 데이터, 바이트로 파일을 읽습니다.

+0

필자는 charset 검색이 정확한 과학 일 것이라고 생각했습니다. 통찰력에 감사드립니다. – Yow

관련 문제