Native2Ascii和Ascii2Native的Java实现

下午同事说要一个Native2Ascii和Ascii2Native的Java实现,Google了半天发现有的是错误的实现,有的只有Native2Ascii没有Ascii2Native,有的又是其他语言实现的,干脆自己参考着写了一个。 

Java代码   收藏代码
  1. package util;  
  2.   
  3. /** 
  4.  * native2ascii.exe Java code implementation. 
  5.  *  
  6.  * @author 
  7.  * @version 1.0 
  8.  */  
  9. public class Native2AsciiUtils {  
  10.   
  11.     /** 
  12.      * prefix of ascii string of native character 
  13.      */  
  14.     private static String PREFIX = "\\u";  
  15.   
  16.     /** 
  17.      * Native to ascii string. It's same as execut native2ascii.exe. 
  18.      *  
  19.      * @param str 
  20.      *            native string 
  21.      * @return ascii string 
  22.      */  
  23.     public static String native2Ascii(String str) {  
  24.         char[] chars = str.toCharArray();  
  25.         StringBuilder sb = new StringBuilder();  
  26.         for (int i = 0; i < chars.length; i++) {  
  27.             sb.append(char2Ascii(chars[i]));  
  28.         }  
  29.         return sb.toString();  
  30.     }  
  31.   
  32.     /** 
  33.      * Native character to ascii string. 
  34.      *  
  35.      * @param c 
  36.      *            native character 
  37.      * @return ascii string 
  38.      */  
  39.     private static String char2Ascii(char c) {  
  40.         if (c > 255) {  
  41.             StringBuilder sb = new StringBuilder();  
  42.             sb.append(PREFIX);  
  43.             int code = (c >> 8);  
  44.             String tmp = Integer.toHexString(code);  
  45.             if (tmp.length() == 1) {  
  46.                 sb.append("0");  
  47.             }  
  48.             sb.append(tmp);  
  49.             code = (c & 0xFF);  
  50.             tmp = Integer.toHexString(code);  
  51.             if (tmp.length() == 1) {  
  52.                 sb.append("0");  
  53.             }  
  54.             sb.append(tmp);  
  55.             return sb.toString();  
  56.         } else {  
  57.             return Character.toString(c);  
  58.         }  
  59.     }  
  60.   
  61.     /** 
  62.      * Ascii to native string. It's same as execut native2ascii.exe -reverse. 
  63.      *  
  64.      * @param str 
  65.      *            ascii string 
  66.      * @return native string 
  67.      */  
  68.     public static String ascii2Native(String str) {  
  69.         StringBuilder sb = new StringBuilder();  
  70.         int begin = 0;  
  71.         int index = str.indexOf(PREFIX);  
  72.         while (index != -1) {  
  73.             sb.append(str.substring(begin, index));  
  74.             sb.append(ascii2Char(str.substring(index, index + 6)));  
  75.             begin = index + 6;  
  76.             index = str.indexOf(PREFIX, begin);  
  77.         }  
  78.         sb.append(str.substring(begin));  
  79.         return sb.toString();  
  80.     }  
  81.   
  82.     /** 
  83.      * Ascii to native character. 
  84.      *  
  85.      * @param str 
  86.      *            ascii string 
  87.      * @return native character 
  88.      */  
  89.     private static char ascii2Char(String str) {  
  90.         if (str.length() != 6) {  
  91.             throw new IllegalArgumentException(  
  92.                     "Ascii string of a native character must be 6 character.");  
  93.         }  
  94.         if (!PREFIX.equals(str.substring(02))) {  
  95.             throw new IllegalArgumentException(  
  96.                     "Ascii string of a native character must start with \"\\u\".");  
  97.         }  
  98.         String tmp = str.substring(24);  
  99.         int code = Integer.parseInt(tmp, 16) << 8;  
  100.         tmp = str.substring(46);  
  101.         code += Integer.parseInt(tmp, 16);  
  102.         return (char) code;  
  103.     }  
  104.   
  105. }  

你可能感兴趣的:(java)