2012-02-08 2 views
2

나는 입력 파일을 그 이름과 내용 (다시 utf8)이 해당 입력 파일을 구성하는 다른 파일을 만드는 정의 된 인코딩 (utf8)으로 가지고 있습니다.설정 파일 이름 인코딩

내 문제는 하나의 특정 Windows 시스템, 만든 파일에 올바른 문자가없는 것입니다. 이 파일의 내용은 완벽하게 읽을 수 있지만 이름은 아닙니다. Ü.xml 대신 파일 이름이 ├£.xml입니다.

다른 Windows 시스템에서는 모든 것이 잘 작동합니다.

파일 내용의 인코딩은 OutputStreamWriter의 두 번째 인수로 설정할 수 있지만 파일 이름 인코딩은 new File(name)에서 설정할 수 없습니다.

감사합니다.

+0

'Ü.xml'을 수동으로 해당 Windows 시스템에 복사하면 어떻게됩니까? 두 시스템에서 JVM의 기본 인코딩은 무엇입니까? – Thomas

+0

수동으로 복사가 작동합니다. 'System.getProperty ("file.encoding")'은 "Cp1252"입니다. – stracktracer

+0

의견에 감사드립니다. 파일이 java 실행에 의해 올바르게 생성되었으므로 문제가 maven 문제 인 것으로 나타났습니다. 그러나 maven이 jar 파일로 패키지를 만들 때만 문제가 있습니다. 참조 : http://stackoverflow.com/questions/9258347/file-name-encoding-in-jar – stracktracer

답변

2

하나의 UTF-8 멀티 바이트 문자 ü이 있어야하는 곳에 두 개의 문자가 표시됩니다. Windows는 파일 인코딩으로 UTF-8이없는 것 같습니다. 그리고 zip 파일의 압축을 푸는 것과 같은 UTF-8 파일이 해당 시스템에 복사되었습니다.

System.getProperty("file.encoding")은 플랫폼 인코딩을 제공해야합니다. 어쩌면 원격으로 상상할 수도 있지만, Java resp에서 다루지 않는 이상한 경우입니다. 압축 된 디렉토리와 같은 Windows 또는 UTF-8이 아닌 파일 시스템으로 포맷 된 두 번째 외부 디스크

+0

답변 해 주셔서 감사합니다. file.encoding은 두 시스템 모두에서 "Cp1252"입니다. – stracktracer

+0

파일은 어떻게 생성 되었습니까? 수동으로 실수가 없어야합니다. Java에서''ü.xml ''처럼 두 가지 오류가있을 수 있습니다. IDE에서 소스 인코딩을 설정할 수 있고 컴파일러도 인코딩으로 매개 변수화 할 수 있습니다 :'javac -encoding Cp1252 ...'. –

2

Java는 "플랫폼의 기본 문자 집합"을 사용하여 파일 이름을 문자열로 변환하므로 표준 API를 통해 해당 동작을 변경할 수 없습니다. 파일 이름 인코딩 시스템 로케일 설정을 통해 영향을 미치는 다른 시스템에있는 유일한 방법을

java -Dfile.encoding=cp1252 package.ClassName 

: 당신은 JVM을 시작할 때 , 일부 시스템에서 기본 인코딩을 변경할 수 있습니다. 여기에 대한 자세한 내용은 여기를 참조하십시오. http://jonisalonen.com/2012/java-and-file-names-with-invalid-characters/

관련 문제