native2Ascii java实现

来源:互联网 发布:其怒乎的其是什么意思 编辑:程序博客网 时间:2024/06/06 12:37
package testapiframe;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[]) {        System.out.println(Native2AsciiUtils.native2Ascii("打开"));        System.out.println(Native2AsciiUtils.native2Ascii("退出"));        System.out.println(Native2AsciiUtils.native2Ascii("隐藏"));        System.out.println(Native2AsciiUtils.ascii2Native("\\u9000\\u51fa"));        System.out.println(Native2AsciiUtils.ascii2Native("\\u6253\\u5f00"));        System.out.println(Native2AsciiUtils.ascii2Native("\\u9690\\u85cf"));    }}

0 0
原创粉丝点击