25. december 2005 - 15:48Der er
29 kommentarer og 1 løsning
Forståelse af java og encodings
Hej Eksperter, Jeg sidder og legere med lidt fil konvertering. Mit problem er dog at konverterer æøå til en char. Jeg bruger FileInputStream og konvertere selv bogstaverne. Jeg konvererer bogstaverne sådan: char mitBogstav = (char)bytes[x]; Men når jeg kommer til æøå for jeg bare et '?'.
Når jeg kigger på min jvm's default encodings, står den på 'ISO8859_1'. Og når debugger for at se hvad byten er for f.eks. 'å' er den som rigtig lig med 229.
arne_v, også her i java? Du er da godt nok allesteder :)
Jeg skriver det ud i prompten (linux - bash), og kigger på den i eclipse's debugger. Begge steder får jeg et '?'. Jeg prøver også at lave et lille check: if (minByte == (byte)229) { if ((char)minByte == 'å') System.out.println("Found å"); } Men den kommer ikke til ((char)b == 'å')
Filen er faktisk en binær fil. Det vil sige at noget af det er nogle bytes (nogle integers ) skrevet med shifting. (dog er æøå skrevet som ascii 8859_1) Jeg læser filen ind i et byte array med fileInputStream.
"hvad sker der hvis du konverterer fra byte array til String ?" Så sker det samme. Jeg har osse prøvet String s = new String(andenString.getBytes("8859_1"));
Jeg må sige at jeg havde lavet en stor brøler! Jeg havde en metode fileOpen(String filename) Jeg havde også en global array bytes[] som indeholdt bytes fra filen.
I min fileOpen metode gjorde jeg følgene: Læste alle bytes ind i en lokal variabel= tmpBytes. og inde i metoden kopierede jeg den lokale tmpBytes til min dstBytes ved at: dstArr = srcArr ( istedet for som du skrev at clone den)
Det var en ret STOR fejl i sig selv!! Dog er det mærkeligt at mit problem med æøå opstod.. Problemet blev løst når jeg direkte læste bytesne ind i min globale array.
Mit Java version: Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_08-b03) Java HotSpot(TM) Client VM (build 1.4.2_08-b03, mixed mode)
Tusind tak for hjælpen arne_v!!!
Synes godt om
Ny brugerNybegynder
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.