/**
* Unicode字符集转换
* 提取于JDK 1.5.0_08 java.util.Properties类的私有方法(loadConvert,saveConvert)
*
* @date 2009-4-7 17:09
*/
public class CharacterSetToolkit {
/**
* 从 Unicode 码转换成编码前的特殊字符串。
* @param in Unicode编码的字符数组。
* @param off 转换的起始偏移量。
* @param len 转换的字符长度。
* @param convtBuf 转换的缓存字符数组。
* @return 完成转换,返回编码前的特殊字符串。
*/
/*
* Converts encoded \uxxxx to unicode chars
* and changes special saved chars to their original forms
*/
public static String unicodeToString(char[] in, int off, int len, char[] convtBuf) {
if (convtBuf.length < len) {
int newLen = len * 2;
if (newLen < 0) {
newLen = Integer.MAX_VALUE;
}
convtBuf = new char[newLen];
}
char aChar;
char[] out = convtBuf;
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);
}
/**
* 将字符串编码成 Unicode 。
* @param theString 待转换成Unicode编码的字符串。
* @param escapeSpace 是否忽略空格。
* @return 返回转换后Unicode编码的字符串。
*/
/*
* Converts unicodes to encoded \uxxxx and escapes
* special characters with a preceding slash
*/
public static String stringToUnicode(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)) {
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();
}
/**
* Convert a nibble to a hex character
* @param nibble the nibble to convert.
*/
private static char toHex(int nibble) {
return hexDigit[(nibble & 0xF)];
}
/** A table of hex digits */
private static final char[] hexDigit = {
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
};
}
分享到:
相关推荐
支持unicode码和字符之间的相互转换
Java通过使用`char`类型来表示单个Unicode字符,该类型占用16位,足够表示基本多文种平面上的所有字符。对于超出BMP的字符,Java会使用代理项(surrogate pairs)来表示,即使用两个`char`值来表示一个Unicode字符。...
将中文字符转换为Unicode编码,可以使用`Character`类的`toChars()`方法,或者直接通过字符串的`codePointAt()`方法获取码点,然后以"\u"开头的十六进制格式表示。例如: ```java String chineseStr = "你好"; for ...
支持Unicode和字符之间的相互转换,修改了1.0的一个bug。
运行环境Java JDK 5.0 Unicode字符转换为中文字符,中文字符转Unicode字符 Unicode字符只支持以\u####格式 <br>MS有人在找这东西,自己也找过,没找着就自己做了一个,功能简单只满足自己的需求:) pp
例如,如果你有一个只包含英文的ASCII文本,而你想要添加一些中文字符,那么就需要将这些新增的字符转换为UNICODE编码。这个过程可能涉及到文本编辑器、编程语言的字符串处理函数,或者专门的转换工具。在编程中,...
在Java编程语言中,处理Unicode编码和十六进制字符转换是一项常见的任务,特别是在处理文本数据时。本示例探讨了如何使用Java实现从Unicode十六进制字符串到中英文字符的转换,以及反过来的过程。理解Unicode和UTF...
2. **Unicode编码到字符转换**:逆向过程,将Unicode编码解析并转换回对应的字符。这需要正确解读每个编码并查找相应的字符。 3. **支持多国语言**:由于Unicode覆盖了世界各地的语言,此转换器能够处理中文、日文...
4. **Unicode转换**:提供将字符转换为Unicode编码(如`charToUnicode(char c)`)和将Unicode编码还原为字符(如`unicodeToChar(String unicodeStr)`)的方法。 5. **URL编码与解码**:在网络请求中,URL中的特殊...
### 关于GBK和Unicode字符集转换乱码问题 在计算机科学与互联网技术中,字符集是一种用于表示文本的标准集合,不同的字符集适用于不同的语言环境。本文将深入探讨GBK与Unicode这两种字符集之间的转换问题,特别是在...
Java反编译与Unicode字符转换是Java开发过程中两个重要的技术环节。反编译是指将已编译的字节码(.class文件)转换回源代码的过程,这对于理解已有的类库或者进行逆向工程非常有用。Unicode是国际通用的字符编码标准,...
本文将深入探讨如何在Java中将String字符串与Unicode字符进行相互转换。 首先,了解Java中的String类。String是Java中的一个不可变对象,用于表示一系列的字符。每个字符在内存中都有其对应的Unicode编码。Java的...
JAVA字符串操作类CTool.java字符转换类,此类中收集Java编程中WEB开发常用到的一些工具。为避免生成此类的实例,构造方法被申明为private类型的。封装的功能:字符串从GBK编码转换为Unicode编码、对字符串进行md5...
Java实现中文字符串与unicode互转工具类是指使用Java语言实现中文字符串与unicode码之间的相互转换。这个工具类主要用于解决中文字符串与unicode码之间的转换问题,提供了escape和unescape两个函数,分别用于将中文...
在编程语言中,字符串常量可以使用'\u'后跟四位16进制数来表示UNICODE字符。 5. UNICODE与其他编码的转换 除了UNICODE,还有其他编码方式,如GBK、BIG5等,它们主要用于特定区域的字符表示。在实际应用中,我们可能...
**Unicode字符集转换详解** Unicode,全称统一码或万国码,是一种为所有现代计算机系统设计的全球字符编码标准。它的目标是为世界上每一种已知的语言提供一个唯一的数字编码,使得各种语言的文字能够在不同的计算机...
字符串转换为Unicode字符序列的常见方法是将每个字符转换为其对应的Unicode转义序列。Java中的String类没有内置方法直接实现这一转换,但可以使用以下方式实现: ```java public static String string2Unicode...
数值各种进制之间转换,及字符转换成unicode工具,界面友好
解决无法将 Unicode 字符串转换为 Ebcdic 字符串的问题
各类编码转换,从unicode 到 Shift-JIS