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=''>院系</option> <option value='临床医学院'>临床医学院</option> <option value='交通学院'>交通学院</option> <option value='人文与管理学院'>人文与管理学院</option> <option value='人文学院'>人文学院</option>
這其中形如 '临床医学院' 的即是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();}