Java中Scanner读取ÆØÅ字符显示问号乱码如何解决?
问题原因
Scanner读取系统输入时默认使用的字符集与终端输入的字符集不匹配,是出现特殊字符乱码的核心原因。JOptionPane为GUI组件,字符解码逻辑不受终端编码影响,因此可以正常识别ÆØÅ类特殊字符。你观察到的Digits字段为Scanner内置的数字识别字符集,和本次乱码问题无关。
解决方案
1. 显式为Scanner指定UTF-8字符集
实例化Scanner时主动传入UTF-8字符集参数,强制使用UTF-8解码输入内容,Java 7及以上版本可直接使用StandardCharsets常量:
import java.nio.charset.StandardCharsets; import java.util.Scanner; // 初始化时指定字符集 Scanner in = new Scanner(System.in, StandardCharsets.UTF_8); String input = in.nextLine();
2. 调整VS Code编码配置
- 打开VS Code设置页,搜索
files.encoding,将值设置为utf8,同时开启files.autoGuessEncoding配置,避免文件本身编码异常 - 搜索对应系统的终端集成配置:
- Windows平台:搜索
terminal.integrated.shellArgs.windows,为PowerShell添加启动参数:-NoExit -Command [Console]::OutputEncoding=[Text.Encoding]::UTF8 - macOS/Linux平台:搜索对应shell的
terminal.integrated.shellArgs配置,添加强制UTF-8编码的启动参数
- Windows平台:搜索
- 重启VS Code终端后再运行程序测试
3. Windows环境额外适配
如果上述配置仍不生效,运行程序前可先在终端执行chcp 65001命令,将控制台代码页切换为UTF-8后再启动Java程序。
内容的提问来源于stack exchange,提问作者user13477558
相关产品推荐
相关产品推荐

