2011-07-01 5 views
1

DB2 데이터베이스가 UTF-8 인코딩을 사용 중입니다. Μπορώ να φάω σπασμένα γυαλιά χωρίς να πάθω τίποτα
체코 어 : Mohu JIST SKLO, neublíží 마일
세르비아어 : Ја могу да једем стакло

소스 테이블은

그리스어 아래에이 라인 같은 UTF-8 텍스트 하나 콜 럼이있다 내 자바 코드가이 일을한다 (.. 관련이없는 부분을 잘라 냈다 ..)
JDBC를 사용하여 UTF-8 데이터베이스를 쿼리하는 방법

ResultSet rs = stmt.executeQuery("SELECT SAMPLE_TEXT FROM UNICODE_TEST"); 
File file = new File("Unicode.txt"); 
BufferedWriter outFile = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF8")); 
while (rs.next()) { 
    outFile.write(rs.getString("SAMPLE_TEXT")); 
    outFile.write("\n"); 
} 

내 파일의 결과는 모든 소스 테이블에서와 같이하지 않습니다. 내가 얻을이 대신

그리스어 : ÎœÏ € οÏÏŽ νΠ± Ï † Î¬Ï ‰ ÏƒÏ € Î ± σμÎνΠ± Î³Ï ... Î ± Πιά Ï ‡ Ï ‰ III, νΠ± Ï € λ
체코어 ± Î ¬Î¸Ï ‰ I "II € οÏ"Mohu JAST SKLO을 neublÞà 마일
세르비아어 : DD ° могу Ð'Ð ° Ñ~ÐμÐ'Ðμм ÑÑ,Ð ° кРо»

내가 무엇을 놓쳤는가?

+0

varchar 대신 nvarchar와 유사한 DB2를 사용하고 있는지 여부를 알 수 없습니다. 어쩌면 당신은 출력을 unencoded 얻고있다 그리고 당신은 문자열 클래스를 사용하여 자신을 다시 인코딩해야합니다 (그리고 바이트 배열로 열을 읽을). 또한 UTF-8을 사용하기 위해 db2 데이터베이스로 설정해야하는 매개 변수가 있는지 점검하십시오. – Luciano

+0

@ Luciano. 데이터베이스는 defnitely UTF-8입니다. 열은 varchar (200)입니다. 유니 코드 인식 SQL 쿼리 도구를 사용하여 검색 할 수 있기 때문에 내용이 UTF-8 인 것을 알 수 있습니다. 예상 한대로 정확하게 출력됩니다. – user754425

+0

생성 된 파일을 보려면 어떤 프로그램을 사용하고 있습니까? – david

답변

2

Java 코드는 정상입니다. 파일 내용이 틀렸습니까? 예를 들어, 터미널에 문제가있는 경우 표시되는 내용이 잘못 표시 될 수 있습니다. UTF-8로 인코딩 된 해당 컴퓨터의 다른 텍스트 파일을 볼 수 있습니까? (확실치 않은 경우 헥사로 읽고 od 등으로 덤프하십시오.) 이것이 당신의 문제가 아니라고 확신한다면, JDBC 커넥션에서 (DB2에 대한 경험이없는) 일부 charset 인코딩 셋팅을 지적 할 것입니다.

+1

정확합니다. UTF-8이 켜져있는 메모장 ++의 한 탭에 원본 텍스트가 있습니다. 자바 결과 집합은 다른 탭에 있지만 변환은 ANSI로 설정되어 있으므로 왜곡 된 모양입니다. – user754425

0

사용중인 데이터베이스를 모르지만 MySQL 인 경우 연결 문자열에 characterEncoding=UTF-8을 추가하십시오.

관련 문제