

新闻资讯
行业动态Java项目中文乱码源于源文件读取、编译、JVM运行、IDE显示、构建工具五环节编码不统一;需统一设为UTF-8:源码保存为UTF-8无BOM,IDE全局/项目编码设UTF-8,javac加-encoding UTF-8,JVM启动加-Dfile.encoding=UTF-8,构建部署环境同步配置。
Java项目中编码格式配置不当,容易导致中文乱码、编译失败或运行时字符串异常。核心问题不在代码本身,而在于源文件读取、编译器解析、JVM运行、IDE显示、构建工具处理这五个环节的字符集是否统一。默认情况下,JDK 17+ 使用UTF-8,但旧版本(如JDK 8)默认用系统编码(Windows常为GBK),极易出问题。
这是起点。无论IDE如何设置,源文件物理编码必须是UTF-8:
perties files → 全部设为UTF-8;勾选“Transparent native-to-ascii conversion”(对properties文件必要)即使源码是UTF-8,javac仍可能按系统默认编码读取——尤其在命令行编译时:
javac -encoding UTF-8 Main.java
pom.xml中配置maven-compiler-plugin:org.apache.maven.plugins maven-compiler-plugin3.11.0 17 17 UTF-8
程序运行阶段,InputStreamReader、Scanner、Files.readString()等API依赖默认字符集,而该默认值由JVM启动时决定:
立即学习“Java免费学习笔记(深入)”;
java -Dfile.encoding=UTF-8 MyApp
System.out.println(Charset.defaultCharset());
Files.readAllLines(path, StandardCharsets.UTF_8)
本地正常 ≠ 服务器正常。Linux服务器LANG常为en_US.UTF-8,但若脚本未声明或容器未配置,仍可能降级:
MAVEN_OPTS含 -Dfile.encoding=UTF-8
ENV LANG=C.UTF-8 或 ENV JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
application.properties中加:server.servlet.encoding.charset=UTF-8 和 server.servlet.encoding.enabled=true(仅影响HTTP请求体解码)