2017-08-22 4 views
0

Ich habe ein Java-Programm, das Zeilen aus einer SQL-Server DB holt und die gleiche Zeile in eine Informix DB einfügt. Die Informix-DB unterstützt nur 8859-1-Zeichensatz. Manchmal fügt der Benutzer eine Zeile in der SQL Server-Datenbank ein, indem er aus Word oder Excel kopiert und eingefügt wird. Dadurch werden einige Zeichen als Unicode-Zeichen (einige davon 3 Byte groß) ausgegeben.Java und Unicode Problem

Wie kann ich eine Filterfunktion schreiben, die die Unicode-Zeichen durch zB ein '?' oder etwas anderes ?

/Jimmy

+0

Vielleicht verwandt: https://stackoverflow.com/questions/229015/encoding-conversion-in-java#229023 –

+0

8859-1 hat 256 Codepunkte mit einem Wert von 0 bis 255 codiert, so dass jede Folge von Byte-Werten ist gültig. Wie würden Sie sagen, dass eine Bytefolge als UTF-8 statt als 8859-1 interpretiert werden sollte? Wo genau fügen die Benutzer _thei_ Text so ein, dass Ihr System es falsch behandelt? –

Antwort

2

Sie alle mit ? Nicht-ASCII-Zeichen ersetzen könnte:

StringBuilder buf = new StringBuilder(); 
for (char ch : originalString.toCharArray()) { 
    if (ch > 127) { 
     buf.append('?'); 
    } else { 
     buf.append(ch); 
    } 
} 
return buf.toString(); 

Eine andere Möglichkeit ist es, einen regulären Ausdruck zu verwenden:

originalString.replaceAll("\\P{ASCII}", "?") 

Es ersetzt alle Zeichen, die keine ASCII-Zeichen mit ?.