Charset Konvertieren

Veröffentlicht von Marco Betschart am

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();
}
Kategorien: Technologie

Marco Betschart

nerdpreneur out of conviction. lover of the never ending journey of exploration. self growth and tech enthusiast. ambitious rock climber and from time to time, adrenaline junkie.

Schreibe einen Kommentar

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