Quindi un 'carattere' in Java è 2 byte. (Possono essere verificati da here.)In che modo Java si adatta a un carattere Unicode da 3 byte in un tipo di carattere?
ho questo codice di esempio:
public class FooBar {
public static void main(String[] args) {
String foo = "€";
System.out.println(foo.getBytes().length);
final char[] chars = foo.toCharArray();
System.out.println(chars[0]);
}
}
E l'uscita è la seguente:
3
€
La mia domanda è, come ha fatto Java montare un 3 byte carattere in un tipo di dati char? BTW, Sto facendo funzionare l'applicazione con il parametro: -Dfile.encoding = UTF-8
Anche se modifico il codice un po 'oltre e aggiungere le seguenti istruzioni:
File baz = new File("baz.txt");
final DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(baz));
dataOutputStream.writeChar(chars[0]);
dataOutputStream.flush();
dataOutputStream.close();
il file finale "baz .txt "sarà solo 2 byte e non mostrerà il carattere corretto anche se lo considero come un file UTF-8.
Modifica 2: Se apro il file "baz.txt" con la codifica UTF-16 BE, vedrò il carattere € bene nel mio editor di testo, il che ha senso immagino.
Java utilizza internamente UTF-16. Vedi http://stackoverflow.com/questions/9699071/what-is-the-javas-internal-represention-for-string-modified-utf-8-utf-16 –
Char non è un personaggio; è meno - che è uno dei maggiori problemi con Java. Vedi utf8everywhere.org per una spiegazione completa su come funziona. –