2012-03-14 19 views
6

mam kilka znaków ze który wygląda mniej więcej tak:Java przekształcić strumień znaków do ludzkiego „czytelnej” string

Комуникационна кабелна система 

i czasami mam mieszankę tak:

Généralités 

pierwszy przekłada się:

К о м у н и к а ц и о н н а к а б е л н а с и с т е м а

a drugi:

G é n é ralit é s

można zobaczyć z przeglądarki, a umieszczenie ich w organizmie.

Ale jak mogę uczynić wyjście java "prawdziwymi" znakami? Jakie jest powyższe kodowanie?

Próbowałem kilka rzeczy, i wreszcie ten (który nie działa):

import java.nio.charset.*; 
import java.nio.ByteBuffer; 
import java.nio.CharBuffer; 

List<String> lst = new ArrayList<String>(); lst.add("&#1050;"); lst.add("&#1086;"); 
for (String s : lst) { 

    Charset utf8charset = Charset.forName("UTF-8"); 
    Charset iso88591charset = Charset.forName("ISO-8859-1"); 

    ByteBuffer inputBuffer = ByteBuffer.wrap(s.getBytes()); 

    // decode UTF-8 
    CharBuffer data = utf8charset.decode(inputBuffer); 

    // encode ISO-8559-1 
    ByteBuffer outputBuffer = iso88591charset.encode(data); 
    byte[] outputData = outputBuffer.array(); 

    System.out.println (new String(outputData)) 
} 
+2

Jest to kod HTML. –

+0

te są nazywane bytami. jeśli szukasz konwersji typu entity-to-unicode, możesz znaleźć to, czego szukasz w ten sposób. – dldnh

+0

@dldnh dzięki za wyjaśnienie! nie jest najłatwiejszą rzeczą do przeszukiwania sieci :) – momomo

Odpowiedz

7

Można użyć commons-lang o przywróceniu znaczenia tego rodzaju rzeczy. W Groovy:

@Grab('commons-lang:commons-lang:2.6') 
import org.apache.commons.lang.StringEscapeUtils as SEU 

def str = 'G&#233;n&#233;ralit&#233;s' 

println SEU.unescapeHtml(str)