>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 29399 个阅读者 刷新本主题
 * 贴子主题:  native2ascii.exe 的Java实现类 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2025-04-10 05:22:47     消息  查看  搜索  好友  邮件  复制  引用

package 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;
}

}



程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->面向对象开发方法概述之UML语言(下)
  JavaWeb开发-->JSP中使用JavaBean(Ⅰ)
  JSP与Hibernate开发-->映射一对多关联关系
  Java网络编程-->安全网络通信
  精通Spring-->虚拟DOM和render()函数
  Vue3开发-->通过Axios访问服务器
  10道Java编程基础练习题
  BIO、NIO和AIO的区别、三种IO的原理与用法
  TCP、UDP及Socket代码示例
  害怕面试被问HashMap?
  如何优雅地打印一个Java对象?
  java常见的几种调用机制:同步调用,异步调用,回调
  Java多线程volatile详解
  Eclipse使用指南:Debug 配置
  Java入门实用代码:获取本机IP地址及主机名
  Java入门实用代码:将文件内容复制到另一个文件
  Java 入门实用代码:取最大和最小值
  Java入门实用代码:获取数组长度
  Java入门实用代码: 字符串格式化
  正则表达式【匹配非字母和数字】
  java Pattern和Matcher详解
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。