Java IO 编码与桥接
Java IO 编码与桥接:字符集、编码转换与乱码解决方案全解析 1 ⚠️ 问题切入:一段乱码代码 先看一段在实际开发中经常遇到的代码。这段代码在不同操作系统上运行,结果 完全不同 : public class GarbledDemo { public static void main(String[] args) throws Exception { // 在 Windows 中文系统上运行(默认 GBK) try (FileWriter writer = new FileWriter("hello.txt")) { writer.write("你好,世界!"); } // 在 Linux 服务器上读取(默认 UTF-8) try (FileReader reader = new FileReader("hello.txt")) { char[] buf = new char[1024]; int len = reader.read(buf); System.out.println(new String(buf, 0, len)); // 输出:你好,世界! ← 正常 // 还是:���← 乱码? // 取决于操作系统! } } } 为什么同一段代码在不同环境下表现不同?因为 FileReader / FileWriter 使用 JVM 默认编码 (通常是操作系统默认编码),而 Windows 中文版默认是 GBK ,Linux 默认是 UTF-8 。写入和读取时编码不一致,就会产生 乱码 (Mojibake,指因字符编码不匹配导致的不可读字符)。 ...