Hallo!
Har lite problem med att översätta en hex kodad sträng till en "läsbar" sträng.
Får inte ÅÄÖåäö att funka.
Vet nån hur charset funkar? Det finns ju en String konstruktor som ser ut så här:
String(byte[] bytes, String charsetName)
Vad innebär charSet name?
Vilka charset names finns det?
Vilket ska jag använda för svenska ÅÄÖåäö?
Kanske inte ens är rätt väg att gå. Har någon nåt tips?
Mvh
phonk
SPiNMedlem sedan mars 20007 896 inlägg Du kan ju använda Charset's till InputStreamReader och OutputStreamWriter, för att ange charset. Om jag nu har förstått dig rätt:
InputStream inputStream = new InputStream( LALA );
InputStreamReader inputStreamReader = new InputStreamReader( inputStream, Charset.forName( "ISO-8859-1" ) );
// Läs...
Vill du konvertera mellan olika charset's så finns metoderna Charset.newDecoder() Charset.newEncoder() som returnerar objekt av typen CharsetDecoder samt CharsetEncoder eller metoderna Charset.decode() samt Charset.encode().
SPiNMedlem sedan mars 20007 896 inlägg
Vad innebär charSet name?
Anger vilken standard som ska användas för att läsa tecknen på rätt sätt.
Vilka charset names finns det?
Många. De vanligaste är väl ändå UTF-8 och ISO-8859-1.
Vilket ska jag använda för svenska ÅÄÖåäö?
ISO-8859-1
Tack SPiN! Ska knacka lite så återkommer jag om det strular.
mvh
phonk
Hehe, njae vad jag än prövade så sprack det. Vete fan hur dom hexkodar strängar. Men hur som helst löste det sig med lite kreativ hårdkodning.
Så om ni nån gång behöver avkoda en UCP sträng från Telia så sno gärna denna så slipper iallafall nån sitta en hel vecka o jävlas.
mvh
phonk
private String ucp2Text(String ucp) throws Exception {
StringTokenizer st = new StringTokenizer(ucp,"'/'",true);
boolean cont = true;
int pos = 0;
String txt = null;
while(cont) {
String token = st.nextToken();
if(token.equals("/")) pos++;
if(pos == 8) {
token = st.nextToken();
int cut = 0;
byte[] ch = new byte[(token.length()/2)];
for(int i = 0;i<(token.length()/2);i++) {
ch[i] = Byte.parseByte(token.substring(cut,cut+2),16);
if((int) ch[i] == 0x0F) ch[i] = (byte) 'å'; //å
else if((int) ch[i] == 0x7B) ch[i] = (byte) 'ä'; //ä
else if((int) ch[i] == 0x7C) ch[i] = (byte) 'ö'; //ö
else if((int) ch[i] == 0x0E) ch[i] = (byte) 'Å'; //Å
else if((int) ch[i] == 0x5B) ch[i] = (byte) 'Ä'; //Ä
else if((int) ch[i] == 0x5C) ch[i] = (byte) 'Ö'; //Ö
cut += 2;
}
try {
txt = new String(ch, Charset.forName( "ISO-8859-1" ).name() );
//System.out.println(txt+":in ISO-8859-1");
} catch(Exception x) {
txt = new String(ch);
x.printStackTrace();
}
cont = false;
}
}
return txt;
}