Welche Codierung verwendet Java UTF-8 oder UTF-16?
Ich habe bereits folgende Beiträge gelesen:
Was ist die interne Darstellung von Java für String? Geändertes UTF-8? UTF-16?https: //docs.oracle.com/javase/8/docs/api/java/lang/String.htmBetrachten Sie nun den unten angegebenen Code:
public static void main(String[] args) {
printCharacterDetails("最");
}
public static void printCharacterDetails(String character){
System.out.println("Unicode Value for "+character+"="+Integer.toHexString(character.codePointAt(0)));
byte[] bytes = character.getBytes();
System.out.println("The UTF-8 Character="+character+" | Default: Number of Bytes="+bytes.length);
String stringUTF16 = new String(bytes, StandardCharsets.UTF_16);
System.out.println("The corresponding UTF-16 Character="+stringUTF16+" | UTF-16: Number of Bytes="+stringUTF16.getBytes().length);
System.out.println("----------------------------------------------------------------------------------------");
}
Wenn ich versucht habe, die Zeile zu debuggencharacter.getBytes()
Im obigen Code hat mich der Debugger in dasgetBytes()
-Methode der String-Klasse und anschließend in dasstatic byte[] encode(char[] ca, int off, int len)
Methode der StringCoding Klasse. Die erste Zeile der encode-Methode String csn = Charset.defaultCharset().name();
) hat beim Debuggen "UTF-8" als Standardkodierung zurückgegeben. Ich habe erwartet, dass es "UTF-16" ist.
Die Ausgabe des Programms ist:
Unicode-Wert für 最 = 6700 Das UTF-8-Zeichen = 最 | Standard: Anzahl der Bytes = 3
Das entsprechende UTF-16-Zeichen = | UTF-16: Anzahl der Bytes = 6
Wenn ich es explizit in UTF-16 konvertiert habe, hat es 6 Bytes gedauert, um das Zeichen darzustellen. Sollte es nicht 2 oder 4 Bytes für UTF-16 verwenden? Warum wurden 6 Bytes verwendet?
Wo gehe ich falsch in meinem Verständnis? Ich verwende Ubuntu 14.04 und der Befehl locale zeigt Folgendes:
LANG=en_US.UTF-8
Bedeutet dies, dass JVM anhand des zugrunde liegenden Betriebssystems entscheidet, welche Codierung verwendet wird, oder wird nur UTF-16 verwendet? Bitte helfen Sie mir, das Konzept zu verstehen.