通过java中文转换为ASCII码的数据

通过java中文转换为ASCII码的数据

package com.console.util;

/**
 * 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) {
 String str = "今天是个好日子,测试java转换ASCII数据";
 String content = native2Ascii(str);
 System.out.println(content);
 }

}

输出数据:

\u4eca\u5929\u662f\u4e2a\u597d\u65e5\u5b50\uff0c\u6d4b\u8bd5java\u8f6c\u6362ASCII\u6570\u636e

未经允许不得转载:安度博客 » 通过java中文转换为ASCII码的数据

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址