2016-09-11 3 views
2

외부 응용 프로그램의 두 번째 데이터베이스에 대한 읽기/쓰기가 필요한 응용 프로그램 (UTF-8 사용)을 작성하고 있습니다 (ISO-8859-1).latin1로 인코딩 된 ResultSet에서 UTF-8로 문자열을 인코딩하는 방법

try { 
    // data in latin1 
    String s = rs.getString("sAddrNameF"); 
    System.out.println(s); // shows "Adresse d'exp�dition" 
    byte[] data = s.getBytes(); 
    String value = new String(data, "UTF-8"); 
    System.out.println("data in UTF8: " + value); 
    // The expected result should be "Adresse d'expédition" 
} catch (UnsupportedEncodingException e) { 
    e.printStackTrace(); 
} 

이 코드는 작동하지 않으며, 나는 여전히 반대 변환 (데이터베이스 작성)이 필요합니다. 다른 사람이 동일한 응용 프로그램에서 다른 인코딩을 처리하는 우아한 솔루션을 알고 있다면 알려 주시면 감사하겠습니다.

+0

의 인 IntelliJ는 표준 –

+0

으로 발견에 대한 트릭 파일의 인코딩을 UTF-8을 사용한다? 데이터베이스 스크립트 백업 만 복원하기 때문입니다. 'mysql -uroot -p

+0

'System.out.println ("é \ u00E9");''éé'가 올바르게 표시되는 경우에만 문제가 있습니다. 콘솔은 자체 인코딩을 사용하므로 신뢰할 수 없습니다. 바이트를 들여다 보는 것은 잘못된 접근법입니다. 더 많은 자바 JDBC 드라이버 전송 프로토콜의 인코딩. –

답변

-2

함수 getBytes는 Charset 또는 원하는 인코딩의 문자열을 사용합니다.

byte[] data = s.getBytes("UTF-8"); 
// or 
byte[] data = s.getBytes(Charset.forName("UTF-8")); 
6
String s = rs.getString("sAddrNameF"); 
System.out.println(s); // shows "Adresse d'exp�dition" 

이 문자열 중 하나를 데이터베이스에 이미 손상되었거나 (예 : MySQL과 characterEncoding=utf8을 전달하는 것과 같은) 잘못된 인코딩을 사용하여 데이터베이스에 연결하는 것을 의미한다.

String을 한 인코딩에서 다른 인코딩으로 변환하는 것과 같은 것은 없습니다. String이 있으면 항상 UTF-16입니다.

구성 문제 일 뿐이므로 걱정할 필요가 없습니다. rs.getString()은 적절한 문자열을 반환하고 PreparedStatement.setString()은 문자열이 데이터베이스에 제대로 저장되도록합니다. 내가 UTF-8을 사용하고

What you should know about Unicode

+0

좋아요, 지금 일하고 있습니다, 원본 파일 (스크립트 .sql을 내 보낸)이 IntelliJ를 사용하여 프로젝트 디렉토리의 누군가에 의해 UTF-8로 수정되고 저장되었다고 생각합니다. 난 처음부터 내보내고 백업 파일을 복원하고 지금 일하고있다. @ 카야 만 귀하의 도움에 감사드립니다! –

관련 문제