Dart从控制台读取俄语文本打印无输出、字符编码全为0如何解决
Dart 控制台读取俄语文本异常解决方案
问题根因
你遇到的读取后打印无内容、codeUnits全为0的问题,核心是编码不匹配:Dart解码用的UTF-8格式和控制台输入的字节流编码不一致,解码后生成的就是无效的空字符。
修复步骤
1. 调整系统控制台编码
如果是Windows系统,运行Dart代码前先在当前控制台执行命令切换编码为UTF-8:chcp 65001
Linux、macOS系统默认终端为UTF-8编码,无需额外调整。
注意:不要用IDE内置控制台测试,多数IDE内置控制台编码默认不是UTF-8,会触发读取异常,需使用系统原生终端运行代码。
2. 调整Dart代码写法
优先设置全局stdin编码,无需手动给单步读取方法指定编码参数:
同步读取示例
import 'dart:convert'; import 'dart:io'; void main() { // 全局设置stdin编码为utf8,统一读取和解码格式 stdin.encoding = utf8; print('请输入俄语单词:'); String? answer = stdin.readLineSync(); if (answer != null) { print('读取到的内容:$answer'); print('codeUnits列表:${answer.codeUnits}'); } }
流式读取示例
import 'dart:convert'; import 'dart:io'; void main() async { stdin.encoding = utf8; print('请输入俄语单词,输入exit退出:'); await for (String line in stdin.lines) { if (line == 'exit') break; print('读取到的内容:$line'); } }
其他注意事项
- 无需手动强制解包
readLineSync的返回值,做空判断即可避免空安全异常 - 俄语属于UTF-8兼容字符,只要编码匹配,不需要做额外的字符转换即可正常读取、打印
内容的提问来源于stack exchange,提问作者Ivan Myasnikov
相关产品推荐
相关产品推荐

