/**
*
* native2ascii.exe Java code implementation.
*
*
*
* @author
*
* @version 1.0
*
*/
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(ascii2Native("\u521d\u59cb\u5316,\u5728\u529e\u7406,\u5ba1\u6838\u4e2d,\u6302\u8d77\u6001,\u5df2\u5b8c\u6210,\u5df2\u7ed3\u675f"));
System.out.println(native2Ascii("已停止"));
}
}
|