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;  
    }  
}
最近下载更多
abdkfksdkf  LV16 2023年3月2日
gao123qq  LV21 2021年5月7日
拾光979  LV11 2020年2月25日
lixiaominghahaha  LV10 2019年4月17日
idcomcn2003  LV5 2019年4月8日
cao1992  LV24 2019年1月21日
17608417105  LV9 2018年9月10日
2303801086  LV1 2018年7月9日
1324488732  LV27 2018年7月1日
lhdznb  LV16 2018年5月5日
最近浏览更多
Wwz12345  LV8 2024年6月4日
2206371875  LV7 2023年11月18日
1358849392  LV21 2023年10月10日
xianyu091012  LV5 2023年7月19日
2017143155  LV12 2023年6月27日
abdkfksdkf  LV16 2023年3月2日
12cq345  LV6 2023年2月24日
zdmlychee  LV2 2022年11月22日
sink122406  LV12 2022年7月11日
mq13947193109  LV19 2022年7月5日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友