JDK 21在Windows Terminal打印表情符号乱码问题求助
JDK 21在Windows Terminal(PowerShell)下UTF-8表情输出异常解决方案
问题现状
环境:JDK 21、Windows 11、Windows Terminal - Powershell
- JDK 21默认
file.encoding为UTF-8,显式指定参数也无改善,代码确认该属性为UTF-8- 手动设置
sun.stdout.encoding为UTF-8后,表情🤣输出变为-fñú,不设置则显示?- 尝试过修改终端代码页、改用
System.console().writer()替代System.out,均无效- 源代码已采用UTF-8编码
可行解决步骤
1. 统一PowerShell编码配置
- 临时生效:在当前PowerShell会话中执行以下命令,强制控制台输入输出使用UTF-8:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::InputEncoding = [System.Text.Encoding]::UTF8 - 永久生效:执行
notepad $PROFILE打开PowerShell配置文件,添加上述两行代码,保存后重启PowerShell即可。
2. 启动Java程序时指定标准编码参数
启动Java程序时添加以下参数,优先使用官方推荐的console.encoding参数:
java -Dconsole.encoding=UTF-8 -Dfile.encoding=UTF-8 YourMainClass
注:
sun.stdout.encoding是非标准参数,JDK 17+建议用console.encoding替代。
3. 代码层面强制指定UTF-8输出
若终端配置仍无效,在代码中直接使用带编码的PrintWriter输出:
import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; public class Main { public static void main(String[] args) { try (PrintWriter writer = new PrintWriter( new OutputStreamWriter(System.out, StandardCharsets.UTF_8), true)) { writer.println("🤣"); } } }
4. 检查Windows Terminal默认编码
打开Windows Terminal设置,进入PowerShell配置文件的「高级」选项,确认「默认编码」设置为UTF-8(对应代码页65001)。
内容的提问来源于stack exchange,提问作者Kobra
相关产品推荐
相关产品推荐

