webForumDet fria alternativet

charset

4 svar · 307 visningar · startad av phonkworks

phonkworksMedlem sedan juli 2001228 inlägg
#1

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
#2

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
#3

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

phonkworksMedlem sedan juli 2001228 inlägg
#4

Tack SPiN! Ska knacka lite så återkommer jag om det strular.

mvh
phonk

phonkworksMedlem sedan juli 2001228 inlägg
#5

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;
	}
129 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)