Unicode-text über socket in java
Stehe ich vor einem kleinen Problem (glaube ich) in der socket-Programmierung. Beim senden von text aus nicht-englischen Sprachen, die ich fehlerhafte Ergebnisse. Nach viel recherche bei google, habe ich einige Korrekturen. Ich änderte getBytes()
zu getBytes("UTF-8")
und versucht zu senden, einige Arabische text.
Beim anschließen von Steckdosen, lokal, funktioniert es einwandfrei. Ich sehe den arabischen text, den ich erwartete. Aber beim testen von online -, die Darstellung der Ergebnisse merkwürdige/fehlerhafte Zeichen ausgeben.
Hier ist der text, den ich versucht:
"مرحبا" (das ist der Arabische text der "hello"), die angezeigt wird, um mich als "Ù...رØØا"
Bitte helfen Sie mir bei der Lösung dieses Problems.
- Posten Sie Ihre server schreiben und client-code Lesen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist etwas Java-code, den ich herumliegen hatte, die verwendet wird für die Einstellung der stream-Codierungen auf ein paar byte-streams, aber Sie könnte das gleiche tun mit einem singleton, zumindest davon ausgegangen, dass Sie TCP-stream-sockets, nicht UDP-Datagramme.
Vielleicht haben Sie vergessen, geben Sie die Codierung für string-Erstellung.
InputStreamReader(InputStream in, CharsetDecoder dec)
oderOutputStreamWriter(OutputStream out, CharsetEncoder enc)
. So beschäftigen Sie sich nur in Java Zeichen; es ist ein sauberer Abstraktion weniger fehleranfällig und zu wiederholen. AufrufgetBytes
ist ein antipattern für diese Szenarien.Ich denke, der einfachste Weg, dies zu lösen, wäre, um ein Serialisiertes Objekt, das einen String-container mit den arabischen text darin.
Nicht schreiben die bytes direkt, verwenden Sie stattdessen:
Dann auf der Empfängerseite, dies zu tun: