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

Dart中stdin.readLineSync读取输入时特殊字符丢失如何解决

问题原因

你遇到的特殊字符丢失问题,是终端默认输入编码与你代码中指定的UTF-8编码不匹配导致的。直接打印硬编码的'Leó'正常是因为硬编码字符串是Dart源码直接用UTF-8解析的,没有走终端输入流的编码转换环节。

解决方案

Windows系统

运行Dart程序前,先在命令行执行编码切换命令:

chcp 65001

这个命令会将当前命令行窗口的编码切换为UTF-8,之后再运行你的Dart程序就能正常读取带特殊字符的输入了。
如果要永久生效,可以修改系统区域设置:控制面板→区域→管理→更改系统区域设置→勾选「Beta版:使用Unicode UTF-8提供全球语言支持」,重启设备后生效。

macOS/Linux系统

先检查当前终端的编码配置,执行命令:

echo $LANG

如果输出不是对应地区的UTF-8格式(比如hu_HU.UTF-8对应匈牙利语、en_US.UTF-8对应美式英语),可以在终端配置文件(.bashrc/.zshrc等,根据你使用的shell选择)中添加:

export LANG=hu_HU.UTF-8
export LC_ALL=hu_HU.UTF-8

保存后执行source ~/.zshrc(对应你的shell配置文件路径)生效即可。

代码优化建议

你也可以去掉硬编码的UTF-8指定,让Dart自动适配系统终端的默认编码解析输入,避免和终端环境不匹配:

import 'dart:io';

main() {
  print('What is your name?');
  // 不手动指定encoding时,默认会用系统终端的编码解析输入
  String? input = stdin.readLineSync();
  print('Hello $input');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:24:05