2009-06-12 4 views
0

Windows 컴퓨터에서 Java/EE 프로그램을 개발했는데 Windows에서 모든 것이 완벽하게 작동했지만 Linux 컴퓨터에서 WAR를 Jboss에 설치하면 csv 파일을 가져올 때 MySQL 인코딩 문제가 발생합니다. . Csv 파일은 ISO-8859-1로 인코딩되고 파일 가져 오기는 ISO-8859-1로 인코딩됩니다. MySQL은 UTF-8로 인코딩 된 문자열을 얻는 것 같지 않습니다. 데이터베이스에서 사용되는 인코딩은 무엇입니까?리눅스 및 MySQL의 인코딩 문제

+0

Java 서버를 사용하여 데이터를 가져올 때 또는 명령 줄 mysql 클라이언트를 사용하여 가져 오기를 수행 할 때 문제가 발생하는지는 명확하지 않습니다. –

답변

0

나는 우리가 하나를 갈하지만 십에 선발로 나가 유니 코드와 캐릭터 세트에 조엘의 기사를 읽고 권 해드립니다 것에 대한 많은 정보가없는 두려워 :

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

그것을 읽어 적어도 두 번 :)

특정 문제의 경우 csv 파일을 여는 Reader가 플랫폼 인코딩 (UTF8 일 가능성이 있음)을 사용하고있는 것입니다. 이는 ISO-8859-1 문서가 될 것임을 의미합니다. 자바 문자열 인코딩으로 잘못 변환되었으므로 여기에서 모두 잘못되었습니다.

Java 응용 프로그램에서 charater 인코딩의 중요한 점은 임의의 String이 UTF-16E라고 생각되는 'Java String encoding'에 있음을 이해하는 것입니다. 그러나 머리 상단을 기억할 수는 없습니다. Java에서 UTF-8 또는 ISO-8859-1 String과 같은 것은 없습니다. 즉, 문자열이 일련의 바이트에서 읽히고 시스템이 반출되는 시스템의 경계를 살펴 봐야합니다. mysql jdbc 드라이버를 사용하고 있기 때문에 타겟 db에 대한 문자 인코딩을 제대로 처리하지 못한다고는 상상할 수 없지만 다른 모든 것이 실패하면 드라이버 설명서를 확인하는 것이 좋습니다.

1

하는 경우 (데이터를 DB에 삽입 할 때와 반대되는) 파일을 읽을 때 문제가 발생한다. 나는 시스템 속성이 꺼져있는 file.encoding이라고 생각한다. 인코딩을 지정하지 않고 독자를 만들면 file.encoding이 기본값으로 사용됩니다. 그래서 리눅스 박스가 시스템 인코딩으로 UTF-8을 가지고 있다면 비 ASCII-7 문자가 문제를 일으킬 것입니다.

당신이, 또는 당신은 단지에 의해 JVM 인스턴스에 대한 로컬로 변경할 수 있습니다 (난 당신이 en_US.ISO-8859-1 같은 것을 사용하지만 설명서를 확인 할 수 있다고 생각) 몇 가지 적절한 값으로 LC_ALL 환경 변수를 설정하여 시스템의 기본 인코딩을 전 세계적으로 변경할 수 있습니다

명령 행에 지정 : 당신은 CSV를을 읽는 코드를 변경할 수있는 경우

java -Dfile.encoding=ISO-8859-1 -jar yourapp.jar 

, 나는 InputStreamReader에서 (직접 또는 간접적으로) 읽고 생각 것 - 단지 올바른 CharSet/CharSetDecoder와 함께 생성자를 제공 너 끝났어. (당신은 또한이 물건을 구성 할 수 있도록 할 수 있습니다 -하지만 난 당신이 스스로 그것을 해결할 수 가정합니다.)

0

당신은 csv 파일의 인코딩이 당신을 도울 것입니다

희망을 변경 GNU iconv를 사용할 수 있습니다.