/* 输出
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);
}
}
分享到:
相关推荐
将中文字符转换为Unicode编码,可以使用`Character`类的`toChars()`方法,或者直接通过字符串的`codePointAt()`方法获取码点,然后以"\u"开头的十六进制格式表示。例如: ```java String chineseStr = "你好"; for ...
4. **`String.getBytes(Charset charset)`**:将字符串转换为指定字符集(如 UTF-8)的字节数组。要将中文字符转换为 Unicode 字节序列,可以使用 `getBytes("UTF-8")`。 现在,我们来看 `unicodeConvert.java` 类...
- 返回一个由汉字转换后的英文字符组成的字符串。 - **实现细节**: - 使用 `getBytes()` 方法获取字符串的字节数组。 - 遍历字节数组,检查每个字节是否小于0(即非ASCII字符)。 - 如果是负数,则使用位运算 `...
首先,它将输入的十六进制字符串转换为字节数组,然后使用这些字节尝试以UTF-8、UTF-16(与Unicode相同)、UTF-16LE(小端字节序)、UTF-16BE(大端字节序)、UTF-32以及各自的LE和BE版本进行解码。`str2all`方法则...
处理Unicode字符串时,需要注意编码和解码的过程。编码是将字符转换为字节序列,解码则相反,将字节序列转换回字符。不同的编码方式可能导致同样的字符有不同的字节表示,例如,同一个汉字在GBK编码和UTF-8编码下的...
在Java中,处理不同字符集之间的字符串转换是一项常见任务。尤其是在处理国际化应用时,理解并掌握各种字符编码格式变得尤为重要。下面将介绍几种常见的字符编码格式以及如何在Java中实现它们之间的转换。 #### 1. ...
这个工具类主要用于解决中文字符串与unicode码之间的转换问题,提供了escape和unescape两个函数,分别用于将中文字符串转换为unicode码和将unicode码转换回中文字符串。 在了解这个工具类之前,我们需要了解什么是...
中文转Unicode码和Unicode码转中文的过程在Java环境下可以通过`native2ascii`工具轻松实现,这个工具是Java开发工具包(JDK)的一部分。 **中文转Unicode码**: 1. 首先,你需要确保已经安装了Java JDK。JDK包含了...
在进行转换时,可以使用 TEncoding.GetString 和 TEncoding.GetBytes 方法,前者将字节数组转换为字符串,后者将字符串转换为字节数组。 总的来说,“字符串与Unicode互转工具”是一个非常实用的编程工具,它帮助...
这个"Unicode转换为字符串小工具"是专门用于处理Unicode编码的实用程序,帮助用户将Unicode编码转换为可读的字符串形式。这对于处理包含多种语言或者特殊字符的数据时非常有用,比如网页编码问题、文本解析、数据...
#### 三、字符串转换为Unicode编码 在Java中,可以通过遍历字符串中的每一个字符,然后获取每个字符对应的Unicode值,并将其转换为十六进制表示来实现这一转换过程。 ```java public static String stringToUnicode...
本篇文章将深入探讨如何使用C++编程语言将文本字符串转换成BMP(Bitmap)图片。 首先,我们需要了解BMP文件格式。BMP是Windows操作系统中常见的位图文件格式,它存储的是未经压缩的像素数据,包括图像宽度、高度、...
GBK编码的字符串转换为Unicode字符串的过程,通常涉及以下几个步骤: 1. 首先,读取GBK编码的字节流。 2. 使用GBK解码器将GBK编码的字节解码为字符。这一步会得到一个基于GBK编码的字符序列。 3. 将GBK编码的字符...
描述中的“反编译后的汉字unicode显示格式转换为字符格式的代码”意味着在反编译过程中,可能会遇到汉字以Unicode编码形式出现,这通常是由于Java字节码中存储字符串的方式决定的。Unicode编码虽然通用,但在直接...
以下是一个将Unicode字符串转换回普通字符串的示例: ```java public static String unicode2String(String unicode) { StringBuffer string = new StringBuffer(); String[] hex = unicode.split("\\\\u"); for...
运行环境Java JDK 5.0 Unicode字符转换为中文字符,中文字符转Unicode字符 Unicode字符只支持以\u####格式 <br>MS有人在找这东西,自己也找过,没找着就自己做了一个,功能简单只满足自己的需求:) pp
在Java中,字符串是以Unicode的形式存储的,这意味着Java的String类内部使用UTF-16编码来表示字符。Java通过使用`char`类型来表示单个Unicode字符,该类型占用16位,足够表示基本多文种平面上的所有字符。对于超出...
在Java编程语言中,将字符串转换为16进制ASCII值是一个常见的操作,尤其是在处理数据编码、网络通信或存储时。这个过程涉及到字符到数字的转换,并且通常使用`Character`类和`Integer`类的方法来完成。让我们深入...
Unicode和汉字转换是计算机处理中文字符时经常遇到的问题。Unicode是一种国际编码标准,它为世界上几乎所有的文字系统提供了一个统一的编码方式,包括汉字。汉字转换则是将汉字在不同的编码格式间进行转换,如从...
这里提供一个能转换十进制和十六进制unicode的java的util类,我们经常会遇到乱码问题,比如在后端与前端交互的时候,由于框架的种种原因,导致乱码,这时候就用到了unicode(万能码),在乱码前转为unicode,就可以...