View Javadoc
1   /**
2    * Copyright By Grandsoft Company Limited.  
3    * 2013-8-6 下午02:45:15
4    */
5   package gboat2.base.bridge.util;
6   
7   /**
8    * 字符编码与汉字转换类,用于某些情况下中文需转码的情况。<br>
9    * 如:将中文文件名转换为字母数字文件名并可逆 (招标.pdf --> 62db6807.pdf)
10   * 
11   * @author sunpf
12   * @date 2013-8-6
13   * @since 2.1.2-SNAPSHOT
14   */
15  public final class CharUtil {
16  
17      /**
18       * 把中文转成Unicode码
19       * 
20       * @param str
21       * @param isWithU
22       *            true生成\u62db\u6807形式,false生成62db6807形式
23       * @return
24       */
25      public static String chinaToUnicode(String str, boolean isWithU) {
26          String result = "";
27          for (int i = 0; i < str.length(); i++) {
28              int chr1 = (char) str.charAt(i);
29              if (chr1 >= 19968 && chr1 <= 171941) {// 汉字范围 \u4e00-\u9fa5 (中文)
30                  if (isWithU) {
31                      result += "\\u" + Integer.toHexString(chr1);
32                  } else {
33                      result += Integer.toHexString(chr1);
34                  }
35              } else {
36                  result += str.charAt(i);
37              }
38          }
39          return result;
40      }
41  
42      /**
43       * 把unicode码字符串转换为中文
44       * 
45       * @param str
46       * @param withU
47       *            true 则 {@code str} 为 \u62db\u6807 形式;false 则 {@code str} 为 62db6807 形式
48       * @return
49       */
50      public static String unicode2China(String str, boolean withU) {
51          StringBuffer out = new StringBuffer("");
52          if (!withU) {
53              for (int i = 0; i < str.length(); i += 4) {
54                  out.append("\\u");
55                  out.append(str.substring(i, i + 4));
56              }
57          } else {
58              out.append(str);
59          }
60  
61          // 将Unicode字符串转换为汉字输出
62          String s[] = out.toString().split("\\\\u");
63          String t = "";
64          for (int j = 1; j < s.length; j++) {
65              int ab = Integer.valueOf(s[j], 16);// 先将16进制转换为整数
66              t = t + (char) ab; // 再将整数转换为字符
67          }
68          return t;
69      }
70  }