日期:2014-05-20  浏览次数:20735 次

正则表达式和Unicode编码的问题
String text = "\u5f53\u7b2c\u4e00";
System.out.println( text );
运行输出结果为:"第一个“;

把上面的text字符窜,保存到文本文件中,然后读取出来
        Pattern p = Pattern.compile("(\\\\u\\w{4})+");
     Matcher m = p.matcher(text);

     while( m.find() ) {
     String str = m.group();
   System.out.println( str) );
                //此处输出结果为:\u5f53\u7b2c\u4e00  而不是对应的中文字符:第一个
                //请问如何才能让输出其对应的中文字符窜:第一个 呢

     } 
------解决方案--------------------
这个有法吗?
String text = "\u5f53\u7b2c\u4e00";就直接是汉字了,下面的正则貌似不能再起作用了
------解决方案--------------------
文件读取的要转码,网上很多,你百度下,unicode转成字符串
------解决方案--------------------
可以使用org.apache.commons.lang.StringEscapeUtils#unescapeJava(String)方法
------解决方案--------------------
可以使用jdk自带的native2ascii.exe来转换,

Runtime r=Runtime.getRuntime();
Process p=r.exec("cmd /C native2ascii.exe -encoding unicode d:\\a.txt", null, new File("D:\\Program Files\\Java\\jdk1.6.0_22\\bin"));//使用cmd执行native2ascii.exe -encoding转换编码为unicode我的native2ascii在D:\Program Files\Java\jdk1.6.0_22\bin文件夹下,你可以根据你的native2ascii的所在目录指定
//转换完后用Process的getInputStream从运行命令中获取输入流来读取转换后的编码字符,接下来就可以用你的正则了
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
String text=null;
while((text=br.readLine())!=null)
      System.out.println(text);
br.close();