Avatar billede poloen Nybegynder
02. september 2013 - 18:18 Der er 7 kommentarer og
1 løsning

java charbuffer decoding

Jeg sidder og forsøger at decode en bytebuffer med en vilkårlig charset, men java printer ikke noget ud, nogen som kan hjælpe?
Avatar billede arne_v Ekspert
02. september 2013 - 20:40 #1
Kan du vise noget kode?

Husk at samme bytes kan vaere valide chars i mere end en encoding, saa uden kendskab til encoding kan man ikke vaere sikker paa at kunne decode.
Avatar billede poloen Nybegynder
02. september 2013 - 21:33 #2
ByteBuffer packbbheader = null;
    ByteBuffer packbbdata = null;

    Charset iso8859 = StandardCharsets.ISO_8859_1;
    Charset us_ascii = StandardCharsets.US_ASCII;
    Charset utf_16 = StandardCharsets.UTF_16;
    Charset utf_16be = StandardCharsets.UTF_16BE;
    Charset utf_16le = StandardCharsets.UTF_16LE;
    Charset utf_8 = StandardCharsets.UTF_8;
    Charset[] stdcs = {iso8859, us_ascii, utf_16, utf_16, utf_16be, utf_16le, utf_8};
    CharBuffer cbuffer = null;

    int i = -1;
    String packdata = new String();
    String packheader = new String();

    boolean run = true;
    Packet pack = new Packet();
    pack = captor.getPacket();
    try {
        while (run) {
        if (pack != null) {
            packbbheader = ByteBuffer.allocate(pack.header.length);
            packbbdata = ByteBuffer.allocate(pack.data.length);
            packbbheader.put(pack.header);
            packbbdata.put(pack.data);
            for (i = 0; i < stdcs.length; i++) {
            cbuffer = stdcs[i].decode(packbbheader);
            System.out.println("break");
            System.out.println(cbuffer);
            }

Det er pågældende kode, som bruges, pcap api'et ville godt tidligere, men så begyndte den at vise underlige tegn, også gik jeg til Charsets osv.
Avatar billede poloen Nybegynder
02. september 2013 - 21:37 #3
Jeg ændrede lige for løkken til at printe "break" + i, og den looper hele tiden. Dog kan jeg se den stadig printer stadig tom linie ved cbuffer.
Avatar billede arne_v Ekspert
08. september 2013 - 04:37 #4
Jeg forstaar ikke koden.

Hvorfor bruge ByteBuffer og ikke bare en helt normal String constructor?

Skal deu ikke modtage packet inden i while loekken?
Avatar billede arne_v Ekspert
08. september 2013 - 04:37 #5
Og hvad er pointen med at decode med flere charset?  (du kan sagtens faa en valid string med flere charset)
Avatar billede poloen Nybegynder
03. november 2013 - 17:32 #6
Det var simpelthen fordi jeg brugte en java pcap wrapper til at hente data fra ip-pakker.
Jeg fik ulæselig data, og konkluderede at de var dekodet i en anden slags font.
Jeg har ikke fundet ud af om de var det, men jeg går ud fra at det er utf-8.

Jeg fandt en anden løsning.

Det var til et projekt med en java wrapper til pcap, hvor jeg fik en masse ulæselig data, men jeg brugte jnetpcap istedet, der får kan jeg både få data i hex & utf-8.
Avatar billede poloen Nybegynder
03. november 2013 - 17:34 #7
Jeg fandt også jchardet & juniversalcharset api til at bruge andre charsets en java standard, hvis nogle skulle gå til den her tråd.
Avatar billede arne_v Ekspert
04. november 2013 - 03:12 #8
Java understoetter da langt de fleste charset out of the box.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester