Java Unicode 转 ASCII
在Java中,将Unicode字符转换为ASCII有几种方法,具体取决于你的需求,以下是几种常见的实现方式:

方法1:使用String的getBytes()方法
public class UnicodeToAscii {
public static void main(String[] args) {
String unicodeStr = "你好,世界!Hello World!";
// 使用ISO-8859-1编码(基本ASCII)
byte[] asciiBytes = unicodeStr.getBytes(StandardCharsets.ISO_8859_1);
String asciiStr = new String(asciiBytes, StandardCharsets.ISO_8859_1);
System.out.println("ASCII (ISO-8859-1): " + asciiStr);
// 使用UTF-8编码(兼容ASCII)
byte[] utf8Bytes = unicodeStr.getBytes(StandardCharsets.UTF_8);
String utf8Str = new String(utf8Bytes, StandardCharsets.UTF_8);
System.out.println("UTF-8: " + utf8Str);
}
}
方法2:手动转换非ASCII字符
public class UnicodeToAscii {
public static String convertToAscii(String input) {
StringBuilder ascii = new StringBuilder();
for (char c : input.toCharArray()) {
if (c <= 127) {
ascii.append(c);
} else {
// 对于非ASCII字符,可以替换为问号、空格或转义序列
ascii.append('?');
// 或者使用Unicode转义序列:ascii.append("\\u").append(Integer.toHexString(c));
}
}
return ascii.toString();
}
public static void main(String[] args) {
String unicodeStr = "你好,世界!Hello World!";
String asciiStr = convertToAscii(unicodeStr);
System.out.println("转换后的ASCII: " + asciiStr);
}
}
方法3:使用Apache Commons Lang库
import org.apache.commons.lang3.StringUtils;
public class UnicodeToAscii {
public static void main(String[] args) {
String unicodeStr = "你好,世界!Hello World!";
// 移除所有非ASCII字符
String asciiStr = StringUtils.stripAccents(unicodeStr)
.replaceAll("[^\\x00-\\x7F]", "");
System.out.println("转换后的ASCII: " + asciiStr);
}
}
注意事项
- ASCII范围:ASCII字符的范围是0-127(十六进制00-7F)
- 字符丢失:直接转换Unicode到ASCII会导致非ASCII字符丢失
- 替代方案:
- 可以使用Unicode转义序列(如
\u4F60\u597D) - 可以使用URL编码(如
%E4%BD%A0%E5%A5%BD) - 可以使用Base64编码
- 可以使用Unicode转义序列(如
完整示例(带Unicode转义)
public class UnicodeToAscii {
public static String unicodeToEscapedAscii(String input) {
StringBuilder escaped = new StringBuilder();
for (char c : input.toCharArray()) {
if (c <= 127) {
escaped.append(c);
} else {
escaped.append(String.format("\\u%04x", (int) c));
}
}
return escaped.toString();
}
public static void main(String[] args) {
String unicodeStr = "你好,世界!Hello World!";
String escapedStr = unicodeToEscapedAscii(unicodeStr);
System.out.println("Unicode转义序列: " + escapedStr);
}
}
选择哪种方法取决于你的具体需求:是简单移除非ASCII字符,还是需要保留Unicode信息的表示形式。

