utf-8-Dekodierung in java

Ich versuche, um Parameter von einer PHP middle tier auf einem java-backend, das versteht J2EE. Ich Schreibe die controller-code in Groovy. In gibt, bin ich versucht zu decodieren einige parameter, die wahrscheinlich enthalten internationale Zeichen.

Ich bin wirklich verwirrt über die Ergebnisse meiner Debuggen dieses problem so weit, daher wollte ich es mit Euch teilen in der Hoffnung, dass jemand in der Lage werden, die richtige interpretation meiner Ergebnisse.

Wegen meiner kleinen test, den parameter ich übergeben ist "déjeuner". Nur um sicher zu sein, System.aus.println("déjeuner") richtig, gibt mir:

déjeuner

in der Konsole

Nun folgenden sind die char - /dec-und hex-Werte der einzelnen Zeichen der original-Zeichenfolge:

next char: d 100 64
next char: ? -61 c3
next char: ? -87 a9
next char: j 106 6a
next char: e 101 65
next char: u 117 75
next char: n 110 6e
next char: e 101 65
next char: r 114 72

beachten Sie, dass die c3a9 Sequenz in UTF-8 ist der gewünschte Charakter: http://www.fileformat.info/info/unicode/char/00e9/index.htm

Nun, wenn ich versuche zu Lesen, dieser string als UTF-8-string, wie in stmt.getBytes("UTF-8"), ich plötzlich am Ende mit einem 11 Byte-Sequenz, wie folgt:

64 c3 83 c2 a9 6a 65 75 6e 65 72

in der Erwägung, dass stmt.getBytes("iso-8859-1") gibt mir 9 bytes:

64 c3 a9 6a 65 75 6e 65 72

Hinweis: die c3a9 Reihenfolge hier!

nun, wenn ich versuchen, zu konvertieren von UTF-8-Sequenz UTF-8, wie in

new String(stmt.getBytes("UTF-8"), "UTF-8");

Bekomme ich:

next char: d 100 64
next char: ? -61 c3
next char: ? -87 a9
next char: j 106 6a
next char: e 101 65
next char: u 117 75
next char: n 110 6e
next char: e 101 65
next char: r 114 72

Hinweis: die c3a9 Sequenz

während

new String(stmt.getBytes("iso-8859-1"), "UTF-8")

Ergebnisse in:

next char: d 100 64
next char: ? -23 e9
next char: j 106 6a
next char: e 101 65
next char: u 117 75
next char: n 110 6e
next char: e 101 65
next char: r 114 72

Hinweis: die e9, die in utf-8 (ascii) ist wieder die 'é' Charakter, dass ich Sehnsucht nach.

Leider, in beiden Fällen bin ich am Ende mit einem richtigen string darstellen würde, wie die Zeichenkette "déjeuner". Seltsam genug, die byte-Sequenzen scheinen beide richtig, obwohl.

InformationsquelleAutor user162346 | 2009-10-29
Schreibe einen Kommentar