Charset Konvertieren

Java unterstützt auf einfache Art und Weise die Konvertierung von Zeichensätzen:

import java.nio.ByteBuffer;
import java.nio.charset.Charset;

Charset utf8 = Charset.forName("UTF-8");
Charset iso88591 = Charset.forName("ISO-8859-1");

//get byte array from string
ByteBuffer utf8Buffer = ByteBuffer.wrap( utf8String.getBytes() );

//convert byte array from UTF-8 to ISO-8859-1
ByteBuffer iso88591Buffer = iso88591.encode( utf8.decode( utf8Buffer ) );

//parse byte array to ISO-8859-1 string
String iso88591String = new String( iso88591Buffer.array(), "ISO-8859-1" ); 

Nähere Angaben zu den unterstützten Zeichensätzen findet sich in der Dokumentation der Klasse Charset.

Um mit Java die Daten aus einer Oracle Datenbank von ISO-8859-1 in UTF-8 konvertieren kann man folgendermassen vorgehen:

import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@server:port:sid", "username", "password");

PreparedStatement selectStmt = connection.prepareStatement("SELECT id,subject FROM messages");
ResultSet resultSet = selectStmt.executeQuery();

Charset utf8 = Charset.forName("UTF-8");
Charset iso88591 = Charset.forName("ISO-8859-1");

System.out.println( "Converting Records..." );

while( resultSet.next() ){
    byte[] raw = resultSet.getBytes("subject");
    ByteBuffer iso88591Buffer = ByteBuffer.wrap(raw);

    //do the actual charset conversion
    ByteBuffer utf8Buffer = utf8.encode( iso88591.decode(iso88591Buffer) );
    
    try{
        String iso88591Str = new String(iso88591Buffer.array(),"UTF8");
        String utf8Str = new String(utf8Buffer.array(),"UTF8");
        
        System.out.println("UTF8: '" + iso88591Str + "' => '" + utf8Str + "'");
        
        PreparedStatement updateStmt = connection.prepareStatement("UPDATE messages SET subject = ? WHERE id = ?");
        updateStmt.setString(1,utf8Str);
        updateStmt.setInt(2, resultSet.getInt("id"));
        updateStmt.executeUpdate();
        updateStmt.close();
        
    } catch( UnsupportedEncodingException e ){}
}

if( selectStmt != null ){
    selectStmt.close();
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.