NCR字符編碼(形如&#xxx)轉換爲漢字 in JAVA

numeric character reference(NCR),數字取值爲目標字符的 Unicode code point;以「&#」開頭的後接十進制數字,以「&#x」開頭的後接十六進制數字。html

「中國」二字分別是 Unicode 字符 U+4E2D 和 U+56FD,十六進制表示的 code point 數值「4E2D」和「56FD」就是十進制的「20013」和「22269」。因此——
java

中国中国

——這兩種 NCR 寫法都會在顯示時轉換爲「中國」二字。瀏覽器

轉自 &#x開頭的是什麼編碼呢。瀏覽器能夠解釋它。如中国等同與中文"中國"?
app

在爬取人人網的學校各個院系名稱結果時,獲得的數據以下:jsp

<select id='department' name='department' class='select' tabindex='6' onchange='changeDept()'>
<option value=''>&#38498;&#31995;</option>
<option value='&#20020;&#24202;&#21307;&#23398;&#38498;'>&#20020;&#24202;&#21307;&#23398;&#38498;</option>
<option value='&#20132;&#36890;&#23398;&#38498;'>&#20132;&#36890;&#23398;&#38498;</option>
<option value='&#20154;&#25991;&#19982;&#31649;&#29702;&#23398;&#38498;'>&#20154;&#25991;&#19982;&#31649;&#29702;&#23398;&#38498;</option>
<option value='&#20154;&#25991;&#23398;&#38498;'>&#20154;&#25991;&#23398;&#38498;</option>

這其中形如 '&#20020;&#24202;&#21307;&#23398;&#38498;' 的即是NCR編碼了,使用UNICODE在線轉換工具能夠將其直接轉換爲漢字,但事實上它又不是UNICODE,區別彷佛就在於Unicode是以u\進行分割,而NCR是以&#進行分割。後面數字字母內容是同樣的, 都有十進制與十六進制兩種表示形式函數

在國內網上搜索NCR編碼轉換原文字,無果。在stackoverlow上找到了一種方法in JAVA 試了一下能夠運行,沒想到並不須要什麼函數,只要一個(char)的強制轉換就行。。雖然原理仍是不太徹底明白
工具

public static String ConvertDecimalNCRToString(String hex){
    String myString = hex.replace("&#", "");
    String[] split = myString.split(";");
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < split.length; i++) 
    {
        sb.append((char)Integer.parseInt(split[i]));
    }
    return sb.toString();}

參考連接:Convert Decimal NCRs Code into UTF-8 in java (JSP)
ui

相關文章
相關標籤/搜索