You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:02:04