

新闻资讯
行业动态Java编译时默认编码非UTF-8,Windows下为GBK,需显式加-encoding UTF-8参数;IDE需统一设置文件编码为UTF-8并重启;运行时应设-Dfile.encoding=UTF-8且终端需支持UTF-8,三者必须一致。
Java源文件若含中文,javac 编译时默认使用系统编码(Wi
ndows 是 GBK),而 IDE 或运行时环境常设为 UTF-8,导致编译后字节码中字符串字面量解码错位。典型表现是控制台输出中文为问号或方块,或 String.getBytes() 结果异常。
javac Main.java 实际按 GBK 读取源码file.encoding=UTF-8 已设在 JVM 启动参数里,它只影响运行时,不影响编译阶段-encoding UTF-8,但命令行或 CI 脚本容易遗漏这是最直接、最可控的方式,适用于所有 Java 版本(5+)且无需修改系统配置。
javac -encoding UTF-8 Main.java
若项目含多个文件,推荐用通配符并确保路径不含空格或特殊字符:
javac -encoding UTF-8 src/*.java
-encoding 必须放在 javac 命令之后、源文件名之前,顺序错误会被忽略-Dfile.encoding=UTF-8 —— 这是 JVM 参数,对 javac 无效IDE 自动设置可能被项目级配置覆盖,尤其从 Git 拉取的旧项目常保留 .idea/misc.xml 或 .settings/org.eclipse.core.resources.prefs 中的编码声明。
UTF-8
Other: UTF-8;再进 Preferences → Java → Compiler → Encoding → 确保勾选 “Use default encoding…” 或手动设为 UTF-8
编译正确 ≠ 输出正确。终端(CMD/PowerShell/Terminal)本身编码、JVM 启动参数、以及 PrintStream 底层实现都会干扰中文显示。
chcp 65001,或改用支持 UTF-8 的终端(如 Windows Terminal)java -Dfile.encoding=UTF-8 MyApp,它影响 new String(byte[])、Files.readString() 等 API 的默认行为Files.readString(path, StandardCharsets.UTF_8)