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

Java程序中重音字母被问号替代的问题求助

Java Scanner读取法语重音字符显示问号的解决办法

问题重现

测试代码:

import java.util.Scanner;

public class Special {
    public static void main(String[] args) {
        System.out.println("Donner le mot");
        Scanner sc = new Scanner(System.in, "UTF-8");
        String w = sc.next();
        System.out.println(w);
    }
}

编译运行命令:

javac Special.java
java Special

输入包含法语重音字母(é、ç、ù等)的字符串时,普通字母正常显示,但重音字母全部变成问号?,且已确认.java文件以UTF-8编码保存。

问题原因

核心是JVM运行时的默认编码、控制台编码与代码中指定的UTF-8不匹配。虽然代码里要求Scanner用UTF-8读取输入,但如果JVM输出编码不是UTF-8,或者控制台本身不支持UTF-8字符显示,就会导致字符转码失败,最终显示问号。

解决方案

  1. 编译和运行时强制指定UTF-8编码
    编译时明确指定源文件编码:

    javac -encoding UTF-8 Special.java
    

    运行时指定JVM使用UTF-8处理文件编码:

    java -Dfile.encoding=UTF-8 Special
    
  2. 调整控制台编码

    • Windows命令提示符:先执行chcp 65001切换到UTF-8编码,再运行程序
    • Linux/macOS终端:通过echo $LANG查看编码,确保输出包含UTF-8(如en_US.UTF-8),若不是则修改终端编码设置为UTF-8
  3. 验证当前编码(可选)
    在代码中添加一行查看JVM默认编码,确认问题根源:

    System.out.println("当前JVM编码:" + System.getProperty("file.encoding"));
    

    若输出不是UTF-8,必须通过运行时参数-Dfile.encoding=UTF-8强制设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:05:10