将 NCR(Numeric Character Reference) 字符转换为真实字符的方法

    xiaoxiao2021-03-25  114

    开发过程中遇到一种奇怪的编码格式:

    每日一色|蓝白~

    使用decode/unescape/decodeURI解码均无效.研究一番,总结一下.

    实际上上面这种奇怪的编码格式并不是编码,而是一种叫做 NCR(Numeric Character Reference) 的标记结构.

    Numeric Character Reference

    看看维基百科的解释:

    A numeric character reference (NCR) is a common markup construct used in SGML and other SGML-related markup languages such as HTML and XML. It consists of a short sequence of characters that, in turn, represent a single character from the Universal Charact

    NCR是一种常见的标记结构,用于SGML和其他SGML相似的标记语言,如HTML和XML。它由一个短的字符序列组成,代表一个字符(全球的文字字符)。

    NCR编码是由一个与号(&)跟着一个井号(#), 然后跟着这个字符的Unicode编码值, 最后跟着一个分号组成的.

    使用java解决,在项目中实践OK。

    public static String decode(String str) {         StringBuffer sb = new StringBuffer();         int i1=0;         int i2=0;         while(i2<str.length()) {            i1 = str.indexOf("&#",i2);            if (i1 == -1 ) {                 sb.append(str.substring(i2));                 break ;            }            sb.append(str.substring(i2, i1));            i2 = str.indexOf(";", i1);            if (i2 == -1 ) {                 sb.append(str.substring(i1));                 break ;            }            String tok = str.substring(i1+2, i2);             try {                  int radix = 10 ;                  if (tok.charAt(0) == 'x' || tok.charAt(0) == 'X') {                     radix = 16 ;                     tok = tok.substring(1);                  }                  sb.append((char) Integer.parseInt(tok, radix));             } catch (NumberFormatException exp) {                  //sb.append(unknownCh);             }             i2++ ;         }         return sb.toString(); }

    转载请注明原文地址: https://ju.6miu.com/read-12024.html

    最新回复(0)