chcp 65001 仅设置控制台代码页为 UTF-8,Java 编译需 -encoding UTF-8、运行需 -Dfile.encoding=UTF-8,且源文件须存为 UTF-8 无 BOM;三者缺一不可,否则必然乱码。

如何解决Windows控制台运行Java乱码_chcp命令与GBK编码转换

chcp 65001 后 Java 输出还是乱码?别急,这不是编码没切对

根本原因是 Windows 控制台(cmd/powershell)的 chcp 只改了终端的代码页,而 Java 默认用系统默认编码(通常是 GBK)读取源文件、输出字符串——两者不一致时,控制台按 UTF-8 解码,Java 却按 GBK 编码,结果就是字节错位、显示成方块或问号。

javac 编译时报 “非法字符:’\ufffd’”?源文件编码没对齐

这个错误说明 javac 读源码时解码失败,把 UTF-8 字节当 GBK 解了。比如中文“你好”在 UTF-8 下是 0xe4 0xbd 0xa0 0xe5 0xa5 0xbd,若用 GBK 解,前两个字节 0xe4 0xbd 在 GBK 中不是合法字符,就变成 \ufffd(替换符)。

java 命令运行后中文输出仍是乱码?file.encoding 决定运行时行为

即使源码编译成功,JVM 运行时默认用系统编码(Windows 上是 GBK)处理 System.out.println() 的内容。它把字符串转成字节写入 stdout,而控制台此时是 chcp 65001(UTF-8),自然对不上。

想一劳永逸?别依赖 chcp,改终端或换工具更可靠

靠每次输 chcp 65001 和一堆 JVM 参数,容易漏、难维护,尤其写脚本或 CI 场景下。真正稳定的做法是绕过 cmd 的老旧代码页机制。

真正卡住人的,往往不是哪个命令没敲对,而是以为改了 chcp 就万事大吉,忽略了 Java 编译、运行、终端三端编码必须严格对齐。少一个环节,就多一个乱码点。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。