Byte-Array to String: Zeichenkaputt

E

Enkodierer

Gast
Hi,

ich habe hier ein Byte-Array in dem ein String drinsteht, der u.U. japanische oder chinesesiche Zeichen beinhalten kann.

Ich möchte natürlich, dass am Ende mein String die fremden Symbole richtig anzeigt, nur gelingt mir das nicth so wirklich.

Mein Versuch war:

Java:
                                ByteArrayInputStream in = new ByteArrayInputStream(buffer);
				DataInputStream readIn = new DataInputStream(in);
				while (readIn.available() > 20) {
					int size = readIn.readInt();
					byte[] id = new byte[size];
					readIn.read(id);
					String idsString = new String(id, "UTF-8"); //<-- UTF-8 hilft leider nicht

Ich hab im Debug nachgesehen und es sind genau so viele Bytes wie vor der Überführung in den Byte-Strom, ich kann daher ausschließen, dass Zeichen verloren gehen. Wie krieg ich Java dazu, meinen String wieder mit auslädnischen Zeichen anzuzeigen?
 
S

SlaterB

Gast
wie stellst du denn fest ob etwas falsch oder richtig war?
Ausgabe auf einer vielleicht begrenzten Konsole oder GUI?
welches Beispiel geht konkret schief, was ist der Fehler, was wäre das richtige Ziel?

falls später wieder bytes benötigt werden, ist dann auch die String-Zwischenstufe zwingend?
 
E

Enkodierer

Gast
Hi,

ich gehe nach dem was ich sehe. Bevor ich das in die Bytes überführe wird es dargestellt, nach dem rücküberführen aus dem Bytes in den String ist es nur noch ein fragezeichen.
Die Anzahl der Bytes und deren Zahlenwert ist erhalten geblieben, von daher dachte ich jetzt es muss ein Zeichensatzproblem sein?

Der String wird auf einer SWT-GUI angezeigt, macht das einen Unterschied?
 
E

Enkodierer

Gast
UTF-16 habe ich probiert.

Mein String ist ein Mischling aus normalen europäischen Zeichen wo chinesische Zeichen einzeln vorkommen können. Mit UTF-16 wird alles als chinesischer Zeichen-Mischmasch dargestellt (und das Zeichen um das es mir konkret geht sieht auch gänzlich anders aus)
 
S

SlaterB

Gast
> Bevor ich das in die Bytes überführe wird es dargestellt, nach dem rücküberführen aus dem Bytes in den String ist es nur noch ein fragezeichen.

das ist noch relativ unscharf, verschiedene PCs, GUI, Konsole, andere Progamme komplett Java-fern, ..?
falls in beiden Fällen Java-Strings beteiligt sind, gib die chars als Zahlenwerte aus, wo sind konkrete Unterschiede,
beschränke die Übertragung vielleicht auf ein gefährliches Zeichen, welche Byte-Werte gibt es an an Stellen usw.,

außer solche Allgemeinhinweise kann ich leider gerade nichts bestimmtes beitragen
 
E

Enkodierer

Gast
Hi,

also ich habe hier einen SWT-Transfer Handel, der mir eine ganze Sammlung von Strings, mit anderen Werten, ins clipboard legt und von da wieder abholt und zurück verwandelt.

Ich hab also reines? Java und arbeite auf OS-X.

>gib die chars als Zahlenwerte aus,
Also die Zahlenwerte des Bytestrom sind identisch, es handelt sich augenscheinlich um die Selbe Information, oder was meinst du genau?
 
S

SlaterB

Gast
es ist wirklich schwer irgendwas zu erkennen wenn du mal von ungeklärten Ausgaben zu unbekannten Zeitpunkten unbekannter Strings oder was auch immer auf unbekannten Medien sprichst,
und nun einfach von 'die Zahlenwerte des Bytestrom sind identisch', was für Ströme sind das?
jeweils vor der Umwandlung in String vor beiden Ausgaben? das muss nicht viel heißen wenn eben genau die Umwandlung das Problem sein sollte,
die Strings selber anzuschauen könnte Unterschiede zeigen, eben etwas genauer die einzelnen chars in den Strings,

aber vorher wäre wohl wirklich ein Gesamtablauf interessant,
welche Planeten, welche Länder, welche Städte, welche Computer, welche Betriebssysteme, welche Programme sind beteiligt,
wie genau entsteht irgendwo jemals ein erster String x, kommt er aus einer Datei?
was passiert mit dem genau, wann wird er wie wo warum ein zweites Mal genutzt, was passiert dazwischen, was IST dazwischen,
Socket-Übertragung, erneutes Datei-Einlesen oder nur innerhalb eines Programms byte[] aus String gemacht usw. usf.,
tausende Details könnten relevant sein,

allerdings Warnung:
es könnte sein dass ich außer solchen allgemeinen Hinweisen letztlich gar nichts dann zur Sache sagen kann,
wenn ich nur nerve einfach ignorieren ;)
 

Murray

Top Contributor
Wenn (Unicode-)Strings in ein Byte-Array umgewandelt werden, dann wird dabei immer ein Encoding verwendet (z.B. UTF-8 oder UTF-16). Wenn man aus dem Byte-Array dann wieder einen String machen will, dann muss man dabei exakt das Encoding angebenen, welches auch "auf dem Hinweg" verwendet wurde.
Hast Du den Code unter Kontrolle, in dem der String in das Byte-Array umgewandelt wird? Kannst Du die Stelle posten?
 
E

Enkodierer

Gast
Hi,

ja den Transferhandle habe ich selbst geschrieben. Es sind normale Java-Strings die ich einlese, ich denke da ist der Defaultzeichensatz gesetzt, welcher ist das? UTF-8?

Muss ich hier das Encoding abfragen und mit den Byte-Strom schreibenß

Java:
ByteArrayOutputStream out = new ByteArrayOutputStream();
			DataOutputStream writeOut = new DataOutputStream(out);

			String idsString="";
			for (int i = 0; i < myType.ids.length; i++){ // hier weden meine strings zu einem string gemacht
				idsString += myType.ids[i];
				if (i+1 < myType.ids.length){
					idsString += "\n";
				}
			}
			
			byte[] buffer = idsString.getBytes(); 
			writeOut.writeInt(buffer.length);
			writeOut.write(buffer);
			// }
			byte[] outBuffer = out.toByteArray();
			writeOut.close();
			super.javaToNative(outBuffer, transferData);
 

Murray

Top Contributor
In Zeile 12 wandelst Du den String in ein Byte-Array um; dabei wird das Plattform-Default-Encoding verwendet. Gib hier doch mal explizit "utf-16" als zweiten Parameter an und ändere das Encoding auch beim Lesen entsprechend.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Byte-Array zu String Allgemeine Java-Themen 7
G String in byte- Array Allgemeine Java-Themen 3
J byte-Array als String übers http schicken Allgemeine Java-Themen 8
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
N Byte Array in Java "dekomprimieren" Allgemeine Java-Themen 3
R Byte Array Zeichensuche Allgemeine Java-Themen 6
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
R In einem Byte-Array nach einer gewissen Zahlenfolge suchen Allgemeine Java-Themen 7
A Input/Output Buffered Image zu Byte Array und zurück konvertieren Allgemeine Java-Themen 4
M byte array splitten Allgemeine Java-Themen 3
W CRC32 aus byte array Allgemeine Java-Themen 5
P Einzelne Bits in einem Byte-Array setzen Allgemeine Java-Themen 2
R int to byte[] Array Allgemeine Java-Themen 4
MQue byte[] Array to Integer Allgemeine Java-Themen 4
ARadauer Blob aus byte Array erstellen? Allgemeine Java-Themen 3
D datei in byte[]-array schreiben Allgemeine Java-Themen 6
MQue ArrayList in ein byte- Array Allgemeine Java-Themen 7
B ein spezielles Byte-Array sortieren Allgemeine Java-Themen 11
J byte-Array in Hashmap speichern? Allgemeine Java-Themen 3
B boolean array = byte array (platzverbrauch) Allgemeine Java-Themen 6
C Byte Array aus Datei erzeugen Allgemeine Java-Themen 6
T BufferedImage aus einem byte-Array? Allgemeine Java-Themen 2
H int aus Byte-Array erzeugen Allgemeine Java-Themen 10
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
Thallius unsigned byte Allgemeine Java-Themen 18
kodela Datentypen byte als unsigned interpretieren Allgemeine Java-Themen 23
W String -> byte[] -> String - Sieht jemand was ich nicht sehe? Allgemeine Java-Themen 10
TheWhiteShadow 2D-Grafik GIF Library mit byte output Allgemeine Java-Themen 10
K Data Konverter - Probleme mit Byte[] Kodierung Allgemeine Java-Themen 3
kodela Byte Order Mark (BOM) bei readLine() ignorieren Allgemeine Java-Themen 5
A Byte zu String Allgemeine Java-Themen 4
RalleYTN Datentypen Unsignierter Byte zum signierten Byte Allgemeine Java-Themen 2
X Datentypen Byte geht nicht höher als 126 auch nicht mit casten? Allgemeine Java-Themen 22
M Null byte in verschiedenen charsets Allgemeine Java-Themen 2
D Decodierung von Mp3-byte[] Allgemeine Java-Themen 4
A ByteBuffer.get(byte[] dst,int offset,int length) Allgemeine Java-Themen 2
A RandomAccessFile.read(byte[] b) Allgemeine Java-Themen 9
P Datentypen Warum überhaupt Byte ? Allgemeine Java-Themen 12
P Datentypen String-Daten zu Byte-Zahlen konvertieren - Komme nicht weiter nach vielem versuchen :-/ Allgemeine Java-Themen 7
E Byte zu String & umgekehrt Allgemeine Java-Themen 3
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
M Chart per byte[] in JSP anzeigen Allgemeine Java-Themen 4
E int in byte Allgemeine Java-Themen 6
R ArrayList byte[] abspeichern Allgemeine Java-Themen 4
S byte [] in string und zurück konvertieren Allgemeine Java-Themen 2
G byte ? : Allgemeine Java-Themen 7
hdi Speicherbelegung byte, short, int Allgemeine Java-Themen 8
J byte - hex - byte.. casten Allgemeine Java-Themen 8
R byte[] to String Konvertieren Allgemeine Java-Themen 14
J Hex-String zu byte transformieren Allgemeine Java-Themen 7
T Zu doof für byte-Umrechnung ... Allgemeine Java-Themen 3
F byte[] aus einem BufferedImage Allgemeine Java-Themen 3
L byte -> byte[1] -> byte Allgemeine Java-Themen 2
Kr0e Synchronisieren: boolean,byte,char ? Allgemeine Java-Themen 2
S Überprüfung/Parsen eines Byte-Arrays Allgemeine Java-Themen 9
Semox Byte-Manipulation eines Bildes Allgemeine Java-Themen 7
Meldanor For-Schleifen - byte statt int? Allgemeine Java-Themen 11
C int zu byte cast - verständnis Allgemeine Java-Themen 3
MQue Byte to Int convertieren Allgemeine Java-Themen 2
R Double Werte aus byte[] auslesen Allgemeine Java-Themen 5
W Verwendung von byte Allgemeine Java-Themen 9
G zu lange Byte code dateien Allgemeine Java-Themen 6
E Byte [] nach hex, dann nach dec Allgemeine Java-Themen 2
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
G 2 x byte zusammenkopieren Allgemeine Java-Themen 7
G byte nach int Allgemeine Java-Themen 3
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
data89 Die Größe eines Strings in Byte berechnen? Allgemeine Java-Themen 12
G Byte- List mit einem Iterator durchlaufen Allgemeine Java-Themen 5
W Konflikt byte->int, in.read->arraycopy Allgemeine Java-Themen 7
T "unsigned" byte[] -> BigInteger Allgemeine Java-Themen 2
F byte in hex-String oder: Wer hat in Mathe aufgepasst Allgemeine Java-Themen 3
T Socket Server Anwendung - Empfang eines Byte-Arrays Allgemeine Java-Themen 7
J NumberFormatException bei String->byte[] Allgemeine Java-Themen 12
T Object -> byte[] Allgemeine Java-Themen 5
G Byte[] zeichenweise lesen Allgemeine Java-Themen 4
G byte[] mit Strings füllen Allgemeine Java-Themen 2
B int -> byte Allgemeine Java-Themen 2
G file --> byte[] Allgemeine Java-Themen 7
E Problem beim Dateien kodieren ("Byte = Byte +1") Allgemeine Java-Themen 3
I String -> byte[] -> String Allgemeine Java-Themen 2
D byte nach integer? Allgemeine Java-Themen 4
MQue int in byte Allgemeine Java-Themen 18
G Maximalgröße von byte[] buffer Allgemeine Java-Themen 7
E String -> byte[] Allgemeine Java-Themen 6
C Byte[] to String Allgemeine Java-Themen 7
D byte[] problem Allgemeine Java-Themen 3
T OutputStream - Event bei Byte-Fluss Allgemeine Java-Themen 5
S Problem beim Einlesen von byte-werten aus datei Allgemeine Java-Themen 2
F List<String> zu byte[] Allgemeine Java-Themen 7
L byte vs. int Allgemeine Java-Themen 6
G Umwandlung Byte in Integer Allgemeine Java-Themen 12
N Byte-Code entschlüsseln (Bitmasks?) Allgemeine Java-Themen 3
R byte - string? Allgemeine Java-Themen 10
R Stream Byte für Byte durchgehen Allgemeine Java-Themen 5
S java.io.InputStream.read(byte[] b) überschreiben Allgemeine Java-Themen 33
L byte[] to int Allgemeine Java-Themen 2
M Vector zu einem byte[] Allgemeine Java-Themen 5

Ähnliche Java Themen


Oben