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

使用UTF-8编码输出Emoji却显示问号的Java代码问题

Emoji输出显示问号的问题排查与解决方法

在编写Emoji相关Java代码时,尽管采用UTF-8编码,但输出仅显示问号,相关代码如下:

System.out.print(boyName + ", will you be my boyfriend? ");
String response = scanner.nextLine();

switch (response.toLowerCase()) 
{
    case "yes":
        System.out.println("Yay! \uD83D\uDE0A"); 
        break;
    case "maybe":
        System.out.println("I'll wait for your decision! \uD83E\uDD14");
        break;
    case "no":
        System.out.println("\uD83D\uDE22"); 
        break;
    default:
        System.out.println("gulo mo, 3 na nga lang pagpipilian");
}

问题原因

  • 控制台默认编码非UTF-8:多数Java运行环境的控制台(比如Windows CMD)默认使用GBK等本地编码,无法解析Emoji的UTF-8字符,导致无法识别的字符被替换为问号。
  • 标准输出流编码不匹配:System.out默认采用系统编码,当系统编码不支持Emoji的双字节代理对时,输出异常。
  • 控制台字体不支持Emoji:部分老旧或默认字体没有包含Emoji字符集,即使编码正确也无法显示。

解决方法

1. 切换控制台编码为UTF-8

  • Windows CMD:运行前执行命令 chcp 65001 切换编码至UTF-8,再启动Java程序。
  • IDE控制台(IntelliJ IDEA/Eclipse):在运行配置中添加VM参数 -Dfile.encoding=UTF-8,或在IDE全局设置中将编码统一改为UTF-8。

2. 显式指定输出流编码

修改代码,使用UTF-8编码的输出流替代默认的System.out,示例代码如下:

import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class EmojiDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String boyName = "YourName";

        // 初始化UTF-8编码的输出流
        PrintWriter utf8Out = new PrintWriter(
            new OutputStreamWriter(System.out, StandardCharsets.UTF_8), 
            true
        );

        utf8Out.print(boyName + ", will you be my boyfriend? ");
        String response = scanner.nextLine();

        switch (response.toLowerCase()) {
            case "yes":
                utf8Out.println("Yay! \uD83D\uDE0A");
                break;
            case "maybe":
                utf8Out.println("I'll wait for your decision! \uD83E\uDD14");
                break;
            case "no":
                utf8Out.println("\uD83D\uDE22");
                break;
            default:
                utf8Out.println("gulo mo, 3 na nga lang pagpipilian");
        }
        scanner.close();
    }
}

3. 更换支持Emoji的控制台字体

如果编码设置正确仍显示问号,需将控制台字体更换为支持Emoji的类型,比如Windows的Segoe UI Emoji,或在IDE控制台设置中选择支持Emoji的字体。

内容的提问来源于stack exchange,提问作者francis245

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:07:41