java中 Numeric Character Reference 與 中文 互轉

說明

Numeric Character Reference
NCR是一種常見的標記結構,用於SGML和其他SGML相似的標記語言,如HTML和XML。它由一個短的字符序列組成,代表一個字符(全球的文字字符)。

NCR編碼是由一個與號(&)跟着一個井號(#), 然後跟着這個字符的Unicode編碼值, 最後跟着一個分號組成的.

&#ddddd;  十進制表示
&#xhhhh;  十六進制表示

還有一種叫 Character entity reference 其表示

&#name;

比如html中常見的表示空格的轉義:

&#nbsp; 

示例

測試內容

用NCR 則表示爲

测试内容

它在html中會自動轉成中文

如:

html源碼中有如下內容:
<p>&#27979;&#35797;&#20869;&#23481;</p>

則會顯示成:
測試內容

java中處理

轉義

    public static String escape(String src){
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < src.length(); i++){
            sb.append("&#");
            sb.append(Integer.toString(src.codePointAt(i)));
            sb.append(";");
        }
        return sb.toString();
    }

轉成中文

    public static String unescape(String src){
        Pattern pattern = Pattern.compile("&#.*?;");
        Matcher matcher = pattern.matcher(src);
        StringBuilder sb = new StringBuilder();
        while (matcher.find()){
            String group = matcher.group();
            int codePoint = Integer.parseInt(group.replaceAll("(&#|;)", ""));
            sb.append((char) codePoint);
        }
        return sb.toString();
    }

其他

apache-commons-lang jar包中也有工具可用
如:commons-lang3-3.7.jar

String s = org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4("&#27979;&#35797;&#20869;&#23481;");
System.out.println(s);

打印:
測試內容
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章