2012-09-14 3 views
2

Windows 클라이언트에서 Linux 서버로 텍스트 파일을 업로드하는 Java 클래스가 있습니다.인코딩을 변경하지 않고 java를 사용하여 파일을 업로드하는 방법

내가 업로드 할 triyng 파일은 Cp1252 또는 ISO-8859-1을 사용하여 인코딩됩니다.

파일을 업로드하면 utf-8을 사용하여 인코딩되므로 éèà와 같은 악센트가 포함 된 문자열을 읽을 수 없습니다.

리눅스 서버의 명령

file -i * 

는이 UTF-8을 사용하여 인코딩 된 것을 알려줍니다.

내가 인코딩 업로드를 diring 변경되었습니다 생각, 그래서 내 서블릿이 코드를 추가 :

<form name="formUpload" 
action="..." method="post" 
enctype="multipart/form-data" accept-charset="ISO-8859-1"> 

lib 디렉토리 I : JSP 파일에서

String currentEncoding=System.getProperty("file.encoding"); 
System.setProperty("file.encoding", "Cp1252"); 
item.write(file); 
System.setProperty("file.encoding", currentEncoding); 

,이 코드가 파일 업로드에 아파치 커뮤니케이션이 사용됩니다.

Doe는 단서가 있습니다. 왜냐하면 나는 정말로 아이디어를 내지 못하기 때문입니다!

감사합니다,

Otmane MALIH

+0

제공된 서블릿 코드는 실제 시나리오에서 이상한 부작용을 유발할 수 있습니다 ... 동시 클라이언트를 기억하십시오 (시스템 특성은 전역 적입니다). – home

+0

나는이 코드를 없애고 ISO-8859-1로 인코딩 된 파일을 강제로 사용하려고했지만 그 작업은하지 않았다. –

답변

2

자바를 시작할 때에만 작동합니다 시스템 프로퍼티 file.encoding 설정. 대신,이 코드로 파일을 열 수있을 것이다 :

public static BufferedWriter createWriter(File file, Charset charset) throws IOException { 
    FileOutputStream stream = new FileOutputStream(file); 
    return new BufferedWriter(new OutputStreamWriter(stream, charset)); 
} 

사용 Charset.forName("iso8859-1") 매개 변수 charset있다.

[편집] 문제는 대부분 file 명령입니다. MacOS는 세계에서 유일하게 자신있게 파일 인코딩을 알려주는 OS입니다. Windows와 Linux는 추측을해야합니다. 이 추측은 잘못 될 수 있습니다.

그래서해야 할 일은 인코딩을 지정하는 편집기로 파일을 여는 것입니다. Windows에서이 작업을 수행해야합니다 (실제로 파일이 Cp1252으로 저장되었는지 확인하려면 일부 응용 프로그램은 플랫폼을 무시하고 항상 UTF-8에 데이터를 안전하게 보관해야합니다).

그리고 리눅스에서도 똑같이해야합니다. 파일을 방금 열면 편집기가 플랫폼 인코딩 (최신 Linux 시스템에서는 UTF-8)을 가져 와서 파일을 읽으려고합니다. ->ISO-8859-1 움라우트가 왜곡됩니다. 그러나 ISO-8859-1으로 파일을 열면 UTF-8이 왜곡됩니다. 그것이 텍스트 파일의 인코딩이 실제로 무엇인지를 확인하는 유일한 방법입니다.

+0

나는 그것을 시도했지만 FileItem item.write (파일 파일)는 BufferedWriter를 인수로 사용하지 않습니다. –

+0

'item.write()'의 코드를 수정해야합니다. 이 오류를 해결할 방법이 없습니다. –

+2

그것은 Commons FileUpload API의 일부입니다.이것은 "단지"수정 될 수 없습니다. 나는 OP가 솔루션에 대한 올바른 방향을 찾고 있다고 생각하지 않습니다. Commons FileUpload는 확실히'FileItem # write()'중에 파일을 디코딩/인코딩하지 않습니다. 변경되지 않은 검색된 바이트에서 스트림을 스트리밍합니다. 문제는 클라이언트 측 또는 파일이 작성된 후 * 서버 측에서 발생합니다. – BalusC

관련 문제