如何配置Java项目的编码为UTF-8_彻底告别Windows环境控制台乱码

阿磊大大_5182

阿磊大大_5182

2026-03-21

381人浏览

原创

java在windows下需统一编译(-encoding utf-8)、jvm运行(-dfile.encoding=utf-8)和终端编码(chcp 65001),三者缺一不可,否则中文注释、字符串或输出将乱码。

如何配置java项目的编码为utf-8_彻底告别windows环境控制台乱码

Java编译时指定UTF-8编码,否则javac默认用系统编码(Windows是GBK)

Windows下不显式指定,javac会按GBK读源码,遇到中文注释或字符串字面量就报error: unmappable character或生成错误的class字节码。IDE里改了项目编码,命令行编译照样乱——因为javac根本不看IDE配置。

实操建议:

  • 命令行编译必须加-encoding UTF-8:比如javac -encoding UTF-8 Main.java
  • Maven项目在pom.xml里配maven-compiler-plugin的encoding参数,值设为UTF-8
  • Gradle项目在build.gradle里加compileJava.options.encoding = "UTF-8"

运行时JVM也要认UTF-8,不然System.out.println("中文")在cmd里还是问号

编译对了,运行时JVM默认用控制台编码(Windows cmd是GBK),PrintStream写到stdout时会按GBK转义,中文直接变??。这不是程序bug,是JVM输出流和终端编码不匹配。

实操建议:

  • 运行时加JVM参数:-Dfile.encoding=UTF-8,例如java -Dfile.encoding=UTF-8 Main
  • 注意:-Dfile.encoding影响整个JVM的默认字符集,包括new String(byte[])、Files.readString()等,别在混合编码的老系统里盲目加
  • 如果只针对控制台输出,可手动包装System.out为PrintStream并指定Charset.forName("UTF-8"),但治标不治本

IDEA/Eclipse的File Encoding设置只是编辑器行为,不影响javac和java进程

很多人在IDE里把文件编码设成UTF-8、把全局编码设成UTF-8,一跑命令行还是乱码——因为IDE的设置只管打开/保存文件时怎么解析字节,不管编译器和JVM怎么干活。

OpenJDK 24
OpenJDK 24

OpenJDK 24 Windows x64 官方参考实现(24+36),适合 Windows 环境进行 Java 开发、编译、运行和版本兼容性验证。

下载

实操建议:

  • IDEA:除了Settings > Editor > File Encodings,还要检查Build > Compiler > Java Compiler里的Target bytecode version旁有没有勾选Use compiler encoding(新版默认关,得手动开)
  • Eclipse:在Preferences > General > Workspace设Text file encoding,同时在Java > Compiler > Building里确认UTF-8被用于“Generated class files and metadata”
  • 关键点:IDE的Maven/Gradle运行配置里,要单独勾选“Override JAVA_TOOL_OPTIONS”或显式传入-Dfile.encoding=UTF-8,否则它起的JVM还是用系统默认

Windows Terminal或ConEmu比原生cmd更可靠,但根本解法是统一chcp 65001 + JVM参数

即使JVM用了-Dfile.encoding=UTF-8,原生cmd默认代码页是936(GBK),无法正确渲染UTF-8字节流,表现为中文显示为空格、方块或错位。有人换PowerShell,结果发现默认也不支持UTF-8输出——除非手动改注册表或调用chcp 65001。

实操建议:

  • 临时生效:运行chcp 65001再执行java -Dfile.encoding=UTF-8 ...
  • 永久生效(谨慎):修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\AutoRun,添加chcp 65001 >nul;或改cmd.exe属性里的“启动选项”为UTF-8
  • 更稳的组合:终端设chcp 65001 + JVM加-Dfile.encoding=UTF-8 + 编译加-encoding UTF-8,三者缺一不可

最容易被忽略的是:Maven子模块可能继承父POM但没覆盖编码配置,或者CI脚本里漏了JVM参数。Windows环境下的编码问题从来不是单点故障,而是三个环节(编辑、编译、运行)的编码链断了一环就全崩。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

10677

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7802

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6792

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1144

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

948

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1396

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2809

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20111

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1235

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习