2012-03-14 108 views
6

我有一堆與人物看起來是這樣的:Java的轉換字符流爲人類的「可讀」字符串

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

,有時我有一個這樣的組合:

Généralités 

的首先翻譯成:

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

和第二給:

摹éňé ralit é小號

我該使用的瀏覽器,並把它們進入人體可以看到。

但是我怎樣才能讓java輸出「真實」的字符呢?以上編碼稱爲什麼?

我已經嘗試了幾件事情,最後這個(沒有工作):

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

它是HTML轉義的。 – 2012-03-14 14:48:56

+0

這些被稱爲實體。如果你尋找實體到Unicode的轉換,你可能會找到你想要的方式 – dldnh 2012-03-14 14:49:42

+0

@dldnh感謝澄清!不是搜索網絡的最簡單的方法:) – momomo 2012-03-14 15:19:28

回答

7

您可以使用commons-lang反轉義這樣的事情。在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)