2013-04-25 2 views
0

프랑스어로 된 폴더 트리가 있습니다. 폴더/파일을 읽는 동안 é 대신 Ã ©를 반환합니다. 나는 캐릭터를 대체하지만 좋은 해결책은 아니다. 이 문제를 어떻게 해결할 수 있습니까? Google에서 답변을 찾았지만 도움이되지 않습니다.Java - é가 Ã ©가됩니다 - 문제를 해결하는 방법

감사합니다.

+6

을하고있다 파일에 é 자바 유니 코드를 인쇄하는 코드 아래 사용했다. 아마 UTF-8 일 때 기본 문자 인코딩을 사용하여 읽는 것일뿐입니다. 그러나 코드를 보지 않고는 말할 수 없습니다. –

+0

또한 시스템에 설정된 운영 체제 및 기본 로케일에 유의하십시오. 예를 들어 러시아어 로켈/언어가 설정된 Windows에서 모든 파일 이름은'Cp866' 인코딩으로 인코딩됩니다. 다른 언어에는 Windows에서 사용되는 다른 비 유니 코드 인코딩이 있다고 생각합니다. –

+0

루트 폴더 경로를 지정하여 하위 폴더에 액세스하고 있습니다. 루트 경로 이름은 영어입니다. 나는 단지'new File (rootPath) '을 사용하고있다. 특별한 것은 없다. 폴더/파일에 é이 있으면 java에서 찾을 수 없습니다. – user2172625

답변

0

이 코드는 일반적으로 올바른 인코딩 형식 (아마도 UTF-8)으로 텍스트를 디코딩하지 않을 때 발생합니다.

좀 더 정확한 대답을 원하면 코드를 게시하여 수정하도록하십시오.

2

인코딩 문제가 있습니다.

모든 문자열은 실제로 비트 집합입니다. 그것들을 읽기 쉽게하기 위해서 우리는 읽을 수있는 문자 표현에 비트 그룹의 매핑을 사용합니다. 이러한 '맵'은 인코딩이라고하는 것을 나타냅니다.

'지도'를 사용하여 인코딩 된 비트를 읽고 다른 '지도'를 사용하여 표시하기 때문에 문제가 발생했습니다.

동일한 인코딩을 사용하고 항상 문자열 조작 함수가 사용중인 인코딩과 작동하는지 확인하십시오. 그것은 귀하의 응용 프로그램을 올바르게 작동시키는 근본입니다.

2

응용 프로그램, set the encoding to utf-8 시작할 때 : 위의 링크에서 언급 한 바와 같이, 많은 자바 클래스는 인코딩을 캐시 것을

java -Dfile.encoding="UTF-8" YourMainClass 

참고; 따라서 런타임 중에 인코딩을 변경하면 해당 클래스의 모든 클래스에 영향을주지 않을 수 있습니다. his answeranother question에의 tchrist에서

복사 설명 :

\N{LATIN SMALL LETTER E WITH ACUTE} 문자 코드 포인트 U+00E9입니다. UTF-8의 경우는 \xC3\xA9입니다. 당신이 주변에 돌고 고유 한 코드로 포인트 U+00C3U+00A9를 두 바이트를 처리하는 경우

는하지만, 그 각각 \N{LATIN CAPITAL LETTER A WITH TILDE}\N{COPYRIGHT SIGN}이다.

+0

VM의 전역이 아닌 코드의 특정 위치에 인코딩을 명시 적으로 설정하는 것이 좋습니다. 'file.encoding' 속성은 Java SE 표준 라이브러리의 모든 기본 인코딩을 제어하지 않습니다. –

0

코드가 올바른 비트를 표시하고 있습니다. 잘못된 점은 실제로 비트가 다른 인코딩에 있다고 들었을 때 그 비트를보기 위해 사용하고있는 것입니다.

이것은 Java 문제가 아닙니다. 자바 출력을보기 위해 사용하는 소프트웨어에 문제가 있습니다. 예를 들어, 터미널 인코딩은 Java가 방출하는 UTF-8이 아닌 ISO-8859-15로 설정 될 수 있습니다.

외부 세계에 대한 모든 UTF-8 워크 플로우와 추상적 인 유니 코드 코드 포인트의 내부 세계가 실제로 도움이됩니다.

일부 입력을 잘못 읽었을 가능성이 있습니다. 입력은 UTF-8이지만 일부 레거시 8 비트 인코딩으로 오인하고 있습니다. 하지만 내 생각에 이미 주어진 것은 디스플레이 장치/프로그램의 인코딩이 잘못 설정된 것입니다.

0

나는 당신이 사용하고있는 코드를 게시하여 시작할 수

writer1 = new FileWriter(outputFile, true); 
writer2 = new BufferedWriter(writer1); 
String str = new String(stringBuffer.toString().getBytes(), **"ISO-8859-1"**); 
writer2.write(str); 
writer1.flush(); 
writer2.flush(); 
관련 문제