Unicode编码转中文字符串

  在HtmlParser包中一个解析html中文本的最基本的方法是:
Parser parser=new Parser(url); 
        NodeFilter filter=new HasAttributeFilter("id","s"); 
        NodeList nodelist=parser.extractAllNodesThatMatch(filter); 
        for(Node node:nodelist.toNodeArray()) 
        { 
            System.out.print(node.toPlainTextString().trim()); 
        } 

  它的作用是将<span id="s">&#39118;&#20113;&#8545;</span>中标签间的字符串提取出来.
  可以注意到,上面的标签间的字符串都是Unicode码.要实现(http://htmlparser.com.cn/post/2009092320..html)里贴图的效果,还得进行Unicode向字符串的转化.
  从百度百科了解到,Unicode为每种语言中的每个字符设定了统一并且唯一的二进制编码.
对于"&#加数字加分号"这种形式的字符,其中的十进制数字其实就是对应字符的唯一的十进制编码.
  于是搜索到了以下转化程序:
public class CodeFormTest {
	public static void main(String args[]) {
		String a = "&#21313;&#26376;&#22260;&#22478;2012&#21050;&#38517;";
		String str = a.replaceAll(";&#", ",").replace("&#", ",").replaceAll(";", ",").replace(" ", "");
		System.out.println(str);
		String[] s2 = str.split(",");
		String s1 = "";
		// System.out.println(s2.length);

		for (int i = 1; i < s2.length; i++) {

			int v = Integer.parseInt(s2[i], 10);
			if (v < 19968 || v > 40895) {

				s1 = s1 + v;
			} else {
				s1 = s1 + (char) v;

			}
			
		}
		System.out.println(s1);
	}
}

  首先,它将原字符串中的";&#"全部替换成逗号,再将字符串开始,末尾和由单纯数字分割开的&#和分号替换成逗号,再用spilt方法获得逗号间的数字.最后用(char)强制转换后即可输出.
  值得注意的是,在Unicode 编码范围中,中文字符的范围是十六进制的4E00-9FBF,也就是十进制的19968-40895,所以很容易把2012这部"数字"电影正确解析出来.程序最后输出的结果是:
,21313,26376,22260,22478,2012,21050,38517,
十月围城2012刺陵

  还有个小问题就是,可能存在恰好有19968-40895之间的数字必须当成十进制数字来解析的情况.
 

你可能感兴趣的:(html,百度)