汉字转码asscii

public class Native2AsciiUtils {
 /**
  * prefix of ascii string of native character
  */
 private static String PREFIX = "\\u";
 /**
  * Native to ascii string. It's same as execut native2ascii.exe.
  *
  * @param str
  * native string
  * @return ascii string
  */
 public static String native2Ascii(String str) {
  char[] chars = str.toCharArray();
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < chars.length; i++) {
   sb.append(char2Ascii(chars[i]));
  }
  return sb.toString();
 }
 /**
  * Native character to ascii string.
  *
  * @param c
  * native character
  * @return ascii string
  */
 private static String char2Ascii(char c) {
  if (c > 255) {
   StringBuilder sb = new StringBuilder();
   sb.append(PREFIX);
   int code = (c >> 8);
   String tmp = Integer.toHexString(code);
   if (tmp.length() == 1) {
    sb.append("0");
   }
   sb.append(tmp);
   code = (c & 0xFF);
   tmp = Integer.toHexString(code);
   if (tmp.length() == 1) {
    sb.append("0");
   }
   sb.append(tmp);
   return sb.toString();
  } else {
   return Character.toString(c);
  }
 }
 /**
  * Ascii to native string. It's same as execut native2ascii.exe -reverse.
  *
  * @param str
  * ascii string
  * @return native string
  */
 public static String ascii2Native(String str) {
  StringBuilder sb = new StringBuilder();
  int begin = 0;
  int index = str.indexOf(PREFIX);
  while (index != -1) {
   sb.append(str.substring(begin, index));
   sb.append(ascii2Char(str.substring(index, index + 6)));
   begin = index + 6;
   index = str.indexOf(PREFIX, begin);
  }
  sb.append(str.substring(begin));
  return sb.toString();
 }
 /**
  * Ascii to native character.
  *
  * @param str
  * ascii string
  * @return native character
  */
 private static char ascii2Char(String str) {
  if (str.length() != 6) {
   throw new IllegalArgumentException("Ascii string of a native character must be 6 character.");
  }
  if (!PREFIX.equals(str.substring(0, 2))) {
   throw new IllegalArgumentException("Ascii string of a native character must start with \"\\u\".");
  }
  String tmp = str.substring(2, 4);
  int code = Integer.parseInt(tmp, 16) << 8;
  tmp = str.substring(4, 6);
  code += Integer.parseInt(tmp, 16);
  return (char) code;
 }
 public static void main(String[] args) {
  String msg = "你好啊";
  System.out.println(native2Ascii(msg));
  System.out.println(ascii2Native(native2Ascii(msg)));
 }
}

 

您还没有登录,请先 登录或者 注册后,添加评论