[Java] Java Native和Ascii转换 →→→→→进入此内容的聊天室

来自 , 2020-06-05, 写在 Java, 查看 107 次.
URL http://www.code666.cn/view/fd06b8ea
  1. public class Native2AsciiUtils {
  2.     /**
  3.      * prefix of ascii string of native character
  4.      */  
  5.     private static String PREFIX = "\\u";  
  6.  
  7.     /**
  8.      * Native to ascii string. It's same as execut native2ascii.exe.
  9.      * @param str native string
  10.      * @return ascii string
  11.      */  
  12.     public static String native2Ascii(String str) {  
  13.         char[] chars = str.toCharArray();  
  14.         StringBuilder sb = new StringBuilder();  
  15.         for (int i = 0; i < chars.length; i++) {  
  16.             sb.append(char2Ascii(chars[i]));  
  17.         }  
  18.         return sb.toString();  
  19.     }  
  20.  
  21.     /**
  22.      * Native character to ascii string.
  23.      * @param c native character
  24.      * @return ascii string
  25.      */  
  26.     private static String char2Ascii(char c) {  
  27.         if (c > 255) {  
  28.             StringBuilder sb = new StringBuilder();  
  29.             sb.append(PREFIX);  
  30.             int code = (c >> 8);  
  31.             String tmp = Integer.toHexString(code);  
  32.             if (tmp.length() == 1) {  
  33.                 sb.append("0");  
  34.             }  
  35.             sb.append(tmp);  
  36.             code = (c & 0xFF);  
  37.             tmp = Integer.toHexString(code);  
  38.             if (tmp.length() == 1) {  
  39.                 sb.append("0");  
  40.             }  
  41.             sb.append(tmp);  
  42.             return sb.toString();  
  43.         } else {  
  44.             return Character.toString(c);  
  45.         }  
  46.     }  
  47.  
  48.     /**
  49.      * Ascii to native string. It's same as execut native2ascii.exe -reverse.
  50.      * @param str ascii string
  51.      * @return native string
  52.      */  
  53.     public static String ascii2Native(String str) {  
  54.         StringBuilder sb = new StringBuilder();  
  55.         int begin = 0;  
  56.         int index = str.indexOf(PREFIX);  
  57.         while (index != -1) {  
  58.             sb.append(str.substring(begin, index));  
  59.             sb.append(ascii2Char(str.substring(index, index + 6)));  
  60.             begin = index + 6;  
  61.             index = str.indexOf(PREFIX, begin);  
  62.         }  
  63.         sb.append(str.substring(begin));  
  64.         return sb.toString();  
  65.     }  
  66.  
  67.     /**
  68.      * Ascii to native character.
  69.      * @param str ascii string
  70.      * @return native character
  71.      */  
  72.     private static char ascii2Char(String str) {  
  73.         if (str.length() != 6) {  
  74.             throw new IllegalArgumentException(  
  75.                     "Ascii string of a native character must be 6 character.");  
  76.         }  
  77.         if (!PREFIX.equals(str.substring(0, 2))) {  
  78.             throw new IllegalArgumentException(  
  79.                     "Ascii string of a native character must start with \"\\u\".");  
  80.         }  
  81.         String tmp = str.substring(2, 4);  
  82.         int code = Integer.parseInt(tmp, 16) << 8;  
  83.         tmp = str.substring(4, 6);  
  84.         code += Integer.parseInt(tmp, 16);  
  85.         return (char) code;  
  86.     }  
  87. }
  88. //源代码片段来自云代码http://yuncode.net
  89.                        

回复 "Java Native和Ascii转换"

这儿你可以回复上面这条便签

captcha