杰瑞科技汇

Java Unicode如何高效转ASCII?

Java Unicode 转 ASCII

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

Java Unicode如何高效转ASCII?-图1
(图片来源网络,侵删)

方法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);
    }
}

注意事项

  1. ASCII范围:ASCII字符的范围是0-127(十六进制00-7F)
  2. 字符丢失:直接转换Unicode到ASCII会导致非ASCII字符丢失
  3. 替代方案
    • 可以使用Unicode转义序列(如\u4F60\u597D
    • 可以使用URL编码(如%E4%BD%A0%E5%A5%BD
    • 可以使用Base64编码

完整示例(带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信息的表示形式。

Java Unicode如何高效转ASCII?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇