/* 输出
Original: 黄 彪彪
to unicode: \u9EC4\ \t\u5F6A\u5F6A
from unicode: 黄 彪彪
使用命令转换: native2ascii -encoding utf-8 a.txt a.txt
Java的properties属性文件会把字符先转换成unicode的形式存储.
*/
import java.io.UnsupportedEncodingException;
public class UnicodeConverter {
public static void main(String[] args) throws UnsupportedEncodingException {
String s = "黄 \t彪\u5F6A";
System.out.println("Original:\t\t" + s);
s = toEncodedUnicode(s, true);
System.out.println("to unicode:\t\t" + s);
s = fromEncodedUnicode(s.toCharArray(), 0, s.length());
System.out.println("from unicode:\t" + s);
}
private static final char[] hexDigit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
private static char toHex(int nibble) {
return hexDigit[(nibble & 0xF)];
}
/**
* 将字符串编码成 Unicode 形式的字符串. 如 "黄" to "\u9EC4"
* Converts unicodes to encoded \\uxxxx and escapes
* special characters with a preceding slash
*
* @param theString
* 待转换成Unicode编码的字符串。
* @param escapeSpace
* 是否忽略空格,为true时在空格后面是否加个反斜杠。
* @return 返回转换后Unicode编码的字符串。
*/
public static String toEncodedUnicode(String theString, boolean escapeSpace) {
int len = theString.length();
int bufLen = len * 2;
if (bufLen < 0) {
bufLen = Integer.MAX_VALUE;
}
StringBuffer outBuffer = new StringBuffer(bufLen);
for (int x = 0; x < len; x++) {
char aChar = theString.charAt(x);
// Handle common case first, selecting largest block that
// avoids the specials below
if ((aChar > 61) && (aChar < 127)) {
if (aChar == '\\') {
outBuffer.append('\\');
outBuffer.append('\\');
continue;
}
outBuffer.append(aChar);
continue;
}
switch (aChar) {
case ' ':
if (x == 0 || escapeSpace) outBuffer.append('\\');
outBuffer.append(' ');
break;
case '\t':
outBuffer.append('\\');
outBuffer.append('t');
break;
case '\n':
outBuffer.append('\\');
outBuffer.append('n');
break;
case '\r':
outBuffer.append('\\');
outBuffer.append('r');
break;
case '\f':
outBuffer.append('\\');
outBuffer.append('f');
break;
case '=': // Fall through
case ':': // Fall through
case '#': // Fall through
case '!':
outBuffer.append('\\');
outBuffer.append(aChar);
break;
default:
if ((aChar < 0x0020) || (aChar > 0x007e)) {
// 每个unicode有16位,每四位对应的16进制从高位保存到低位
outBuffer.append('\\');
outBuffer.append('u');
outBuffer.append(toHex((aChar >> 12) & 0xF));
outBuffer.append(toHex((aChar >> 8) & 0xF));
outBuffer.append(toHex((aChar >> 4) & 0xF));
outBuffer.append(toHex(aChar & 0xF));
} else {
outBuffer.append(aChar);
}
}
}
return outBuffer.toString();
}
/**
* 从 Unicode 形式的字符串转换成对应的编码的特殊字符串。 如 "\u9EC4" to "黄".
* Converts encoded \\uxxxx to unicode chars
* and changes special saved chars to their original forms
*
* @param in
* Unicode编码的字符数组。
* @param off
* 转换的起始偏移量。
* @param len
* 转换的字符长度。
* @param convtBuf
* 转换的缓存字符数组。
* @return 完成转换,返回编码前的特殊字符串。
*/
public static String fromEncodedUnicode(char[] in, int off, int len) {
char aChar;
char[] out = new char[len]; // 只短不长
int outLen = 0;
int end = off + len;
while (off < end) {
aChar = in[off++];
if (aChar == '\\') {
aChar = in[off++];
if (aChar == 'u') {
// Read the xxxx
int value = 0;
for (int i = 0; i < 4; i++) {
aChar = in[off++];
switch (aChar) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
value = (value << 4) + aChar - '0';
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
value = (value << 4) + 10 + aChar - 'a';
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
value = (value << 4) + 10 + aChar - 'A';
break;
default:
throw new IllegalArgumentException("Malformed \\uxxxx encoding.");
}
}
out[outLen++] = (char) value;
} else {
if (aChar == 't') {
aChar = '\t';
} else if (aChar == 'r') {
aChar = '\r';
} else if (aChar == 'n') {
aChar = '\n';
} else if (aChar == 'f') {
aChar = '\f';
}
out[outLen++] = aChar;
}
} else {
out[outLen++] = (char) aChar;
}
}
return new String(out, 0, outLen);
}
}
分享到:
相关推荐
Java中文成Unicode码及从Unicode码转成中文
运行环境Java JDK 5.0 Unicode字符转换为中文字符,中文字符转Unicode字符 Unicode字符只支持以\u####格式 <br>MS有人在找这东西,自己也找过,没找着就自己做了一个,功能简单只满足自己的需求:) pp
当需要对一个unicode十六进制字符串进行编码时,首先做的应该是确认字符集编码格式,在无法快速获知的情况下,通过一下的str4all方法可以达到这一目的
主要为大家详细介绍了Java实现中文字符串与unicode互转的工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这里提供一个能转换十进制和十六进制unicode的java的util类,我们经常会遇到乱码问题,比如在后端与前端交互的时候,由于框架的种种原因,导致乱码,这时候就用到了unicode(万能码),在乱码前转为unicode,就可以...
Java 的16 进制与字符串的相互转换函数 JAVA 时间格式化处理 将毫秒转化为日期 文本的倒序输出 判断一个数字是奇数还是偶数 用Hibernate 实现分页 35 选7 彩票程序 获取GMT8 时间 中文乱码转换 Big5 字与Unicode 的...
pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制。 pinyin4j是一个支持将中文...支持多种字符串输出格式,比如支持Unicode格式的字符ü和声调符号(阴平 "ˉ",阳平"ˊ",上声"ˇ",去声"ˋ")的输出。
//将字符串存入StringBuffer中 BufferedReader br = new BufferedReader(isr); String line = null; while ((line = br.readLine()) != null) { sb.append(line + "\n"); } br.close(); isr.close(); ...
坑3:Java的字符串转字节数组,getBytes函数无参时默认为utf-8,汉字占三字节,英文字符占1字节;若指定参数为unicode,则转换后前二字节为-2,-1,后两字节为一个字符(高位在前,低位在后);而DotNET转换后,无前...
java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...
* 字符编码工具类 , 主要方法:1)获取传入字符串的编码格式 2)根据新的编码格式生成新字符串 /** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */ US_ASCII("US-ASCII","位ASCII字符,也叫作ISO...
用于常用编码转换,包括BREW、JAVA等语言UNICODE字符串定义格式,网页编码,GBK及UTF-8的URL编码等
java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类。...
数组和数组之间的转换代码,从资源文件里读取值的类,一个随机类,计算传入值是否星期六,为RootPaneContainer组件添加键盘事件,将数组转成字符串 在调试或记录日志时用到,转换文件大小,多线程的世界时钟,显示...
-8 - 将Unicode字符转换为ANSI字符串,如果输出字符串是中文的话一定要加上这个参数才能正确显示。 最常用的反编译指令如下所示: Jad –d c:\\javasource –s .java -8 javatest.class 这条指令将当前目录下的...
它将unicode文本中的特殊字符转换为相应的ascii字母,并支持几乎所有常见语言,包括CJK(中文,日文和韩文)。 从Node.js模块移植: : 安装 上传到Maven代表-TO GO现在只编译本地存储库 用法 添加Maven依赖项:...
将java中\u7535\u8111\u5f00\u673a\u663e\u793a\u84dd\u5c4f乱码转换成中文显示出来。
将字符串转移为Unicode码 对象是否为无效值 是否包含中文字符 对象是否为无效值 参数是否是有效数字 (整数或者小数) 匹配到第一个字符串 参数是否是有效整数 字符串参数是否是double 判断一个对象是否为boolean...
java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...
* 向串口中写进字符串命令 * @param s 字符串命令 * @throws Exception 异常 */ public void writeln(String s) throws Exception { out.write(s); out.write('\r'); out.flush(); } /** * 读取COM命令...