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

控制台输入下标字符丢失问题:输入₂为何变为普通数字2?

问题

简言之,运行以下代码片段时:

Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine(); // 输入₂

System.out.println(text); // 输出2,而非₂

当输入下标数字(如₂)时,text实际值为2,不带有下标格式。

测试验证

我针对常见原因进行了排查:

是打印问题吗?

直接对比字符串结果仍不正确:

Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine(); // 输入₂

System.out.println(text.equals("₂")); // false
System.out.println(text.equals("2")); // true

是Scanner的问题吗?

若输入为字符串形式,Scanner可正确处理:

Scanner scanner = new Scanner("₂");
String text = scanner.nextLine();

System.out.println(text); // 输出₂

是System.in的问题吗?

完全移除Scanner后问题仍存在:

byte[] data = System.in.readAllBytes(); // 输入₂
String text = new String(data, StandardCharsets.UTF_8).trim();

System.out.println(text);  // 输出2,而非₂

是编码问题吗?

这并非通用Unicode/编码问题,输入其他字符(如🤔)可正常读取:

Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine(); // 输入🤔

System.out.println(text); // 输出🤔
推测

下标字符似乎在控制台输入到System.in的过程中丢失,甚至可能未到达Java程序。
这可能是我不了解的控制台特有特性?我在VSC和Windows CMD(Java 18)中均测试过该问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:00:16