Probleme mit Strings

  • Java

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Alex-Digital.

    Probleme mit Strings

    Hi,

    habe ein "kleines" Problem:

    Habe folgenden Code:

    Quellcode

    1. byte[] bytes = new byte[bytesToReceive];
    2. stream.read(bytes, 0, bytesToReceive);
    3. String source = new String(bytes, 0, bytesToReceive, "UTF-16LE");
    4. System.out.println(source);


    Normaler ist source ein XML-String, aber an einer bestimmten Stelle werden nur noch viele �-Zeichen ausgegeben.
    Ich weiß aber nicht wieso :(

    Es scheint so als wäre was mit dem String-Konstruktor falsch, hatte das "0, bytesToReceive" auch schon weg, aber erfolglos.

    Hat jemand eine Lösung? :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Hallo Alex,

    Das "UTF-16LE"-Zeugs gefällt mir nicht so. Tippel mal Unicode rein - vielleicht hilft's. ^^

    Grüsse,

    Higlav

    EDIT: Mist, sowas kennt der Konstruktor wohl nicht. Dann, guckst du hier(und hier).
    Eigentlich ist der String UTF-16/Unicode mit Little-Endian (soweit ich weiß) und habe schon die ersten Konstruktoren getestet, gingen aber nicht.
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D

    Alex-Digital schrieb:

    [...]und habe schon die ersten Konstruktoren getestet, gingen aber nicht.

    Meintest du damit den String(byte[] bytes, String charsetName)-Konstruktor? Denn den wollte ich eigentlich sowieso gerade als Optimierung angeben, da du ja sowieso das ganze Array durchgehst.

    Welche Zeichen werden denn so verunstaltet?

    Hast du mal alle Charsets durchprobiert?(ich weiss, Holzfällermethode, aber da es eigentlich gehen sollte...)

    Findest du vielleicht hier die gesuchte Lösung?

    Alex-Digital schrieb:

    an einer bestimmten Stelle werden nur noch viele �-Zeichen ausgegeben
    Schau dir mal den Byte-Stream an.
    Vielleicht fehlt da ein Byte (oder ist zuviel) und damit verschiebt sich alles dahinter um ein Byte und es werden nicht zusammengehörende Unicode-Paare gebildet.
    Im Zweifel einfach an der Stelle ein beliebiges Byte einfügen, dann müsste es zumindest danach wider richtig weiter gehen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Also es ist ein TCP-Client und von dem Server, der in C# geschrieben ist (Hurricane *hust*), wird das so abgeschickt (Github).

    Normaler sollte da nicht fehlen.

    EDIT: Hat sich jetzt erledigt (mit @VincentTBs Hilfe :D)
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Alex-Digital“ ()