温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java String 如何避免乱码

发布时间:2026-10-26 12:28:03 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

在 Java 中,String 本身不会乱码,乱码通常出现在 字节 ↔ 字符转换 的过程中。只要编码和解码使用一致的字符集,就可以避免乱码。

下面从原理到实践系统说明。


一、核心原理(先记住这一点)

String 内部始终使用 UTF-16

乱码发生在:

  • byte[] → String(解码)
  • String → byte[](编码)

✅ 关键:编码和解码使用相同的 charset


二、最常见的乱码场景 & 正确写法

1️⃣ 字节数组 → String(最容易导致乱码)

❌ 错误(使用平台默认编码)

byte[] bytes = ...;
String s = new String(bytes); // 可能乱码

✅ 正确(明确指定编码)

String s = new String(bytes, StandardCharsets.UTF_8);

2️⃣ String → 字节数组(写出文件/网络)

❌ 错误

byte[] bytes = s.getBytes(); // 平台相关

✅ 正确

byte[] bytes = s.getBytes(StandardCharsets.UTF_8);

3️⃣ 文件读写(非常重要)

读文件

try (BufferedReader br = new BufferedReader(
        new InputStreamReader(
                new FileInputStream("a.txt"),
                StandardCharsets.UTF_8))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
}

写文件

try (BufferedWriter bw = new BufferedWriter(
        new OutputStreamWriter(
                new FileOutputStream("a.txt"),
                StandardCharsets.UTF_8))) {
    bw.write("中文");
}

✅ 推荐直接用:

Files.readString(Path.of("a.txt"), StandardCharsets.UTF_8);
Files.writeString(Path.of("a.txt"), "中文", StandardCharsets.UTF_8);

4️⃣ 网络传输(Socket / HTTP)

  • 发送端和接收端 必须约定同一编码
  • 通常统一使用 UTF-8

示例(HTTP):

response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");

5️⃣ 数据库(JDBC)

✅ 连接 URL 指定编码:

jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8

✅ 数据库、表、字段统一为 utf8mb4


三、Java 中推荐使用的方式(总结)

✅ 永远不要依赖默认编码

场景 推荐
字符串 ↔ 字节 StandardCharsets.UTF_8
文件 Files / Reader / Writer
Web UTF-8
数据库 UTF-8 / utf8mb4

四、如何检查当前默认编码(不推荐依赖)

System.out.println(Charset.defaultCharset());

⚠️ 不同操作系统结果不同(Windows 常是 GBK)


五、一句话总结

String 不乱码的关键:
在 byte ↔ char 转换时,始终明确指定 UTF-8,不依赖系统默认编码。

如果你有具体场景(文件 / 接口 / 控制台 / 数据库),我可以给你针对性代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手