Axel Richter: Textcodierung.. es ist zum Haareausraufen

Beitrag lesen

Hallo,

data_in.readUTF() muss ich zweimal ausführen, um den Zeiger zu verschieben? Wie werden denn die beiden Datensätze auseinander gehalten.

http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataOutputStream.html
writeUTF(java.lang.String)
First, two bytes are written to the output stream as if by the writeShort method giving the number of bytes to follow. This value is the number of bytes actually written out, not the length of the string. Following the length, each character of the string is output, in sequence, using the UTF-8 encoding for the character.

http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html
#readUTF()
First, two bytes are read and used to construct an unsigned 16-bit integer in exactly the manner of the readUnsignedShort method . This integer value is called the UTF length and specifies the number of additional bytes to be read. These bytes are then converted to characters by considering them in groups. The length of each group is computed from the value of the first byte of the group. The byte following a group, if any, is the first byte of the next group.

Das Programm fruchtet ja so einwandfrei, nur möchte ich die Datei nich generieren lassen. Ich möchte sie per Hand schreiben.

Da kann ich Dir nicht helfen. Eventuell weiß ja jemand anders noch was. Das Problem ist: Wie bekommt man eine Datei, die mit .readUTF() ausgelesen werden kann?

Und mir leutet immernoch nicht ein warum er exakt gleiche String nämlich "\u308f\u305f\u3057" verschieden bahandelt wird, nur weil er einmal aus der Datei kommt und einmal nicht. Das ist doch völlig unlogisch.

Nö. Es ist nicht der gleiche String.

String s = "\u308f\u305f\u3057";
Hier wird durch den Compiler UTF-Codiert. Der String ist drei UTF-Zeichen lang.
Wie hier:
char data[] = {'\u308f', '\u305f', '\u3057'};
String s = new String(data);

Beim Einlesen mit BufferedReader.readLine() passiert folgendes:
char data[] = {'\', 'u', '3', '0', '8', 'f', '\'...};
String s = new String(data);
Der String ist 18 Zeichen lang.

viele Grüße

Axel