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
相关产品推荐
相关产品推荐

