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);

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