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字符显示,就会导致字符转码失败,最终显示问号。
解决方案
编译和运行时强制指定UTF-8编码
编译时明确指定源文件编码:javac -encoding UTF-8 Special.java运行时指定JVM使用UTF-8处理文件编码:
java -Dfile.encoding=UTF-8 Special调整控制台编码
- Windows命令提示符:先执行
chcp 65001切换到UTF-8编码,再运行程序 - Linux/macOS终端:通过
echo $LANG查看编码,确保输出包含UTF-8(如en_US.UTF-8),若不是则修改终端编码设置为UTF-8
- Windows命令提示符:先执行
验证当前编码(可选)
在代码中添加一行查看JVM默认编码,确认问题根源:System.out.println("当前JVM编码:" + System.getProperty("file.encoding"));若输出不是
UTF-8,必须通过运行时参数-Dfile.encoding=UTF-8强制设置。
内容的提问来源于stack exchange,提问作者Ghassen Mastouri
相关产品推荐
相关产品推荐

