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

Ruby中gets方法无法读取日文控制台输入的问题排查

解决Ruby在Win10 PowerShell中读取日文输入乱码的问题

这个问题本质是控制台编码和Ruby输入编码不匹配导致的:

Win10的PowerShell默认编码现在大多是UTF-8,但Ruby在Windows环境下,默认会用系统的ANSI编码(日文系统对应CP932,也就是Shift-JIS)来解析控制台输入。当你输入UTF-8编码的日文时,Ruby把它当成CP932来读,自然就出现乱码了——而直接print "おはよう"正常,是因为脚本里的字符串编码已经被Ruby正确识别,输出时匹配了控制台的编码。

给你两个可行的解决办法:

办法1:修改Ruby代码,指定输入编码为UTF-8

直接在代码里设置默认外部编码,让Ruby用UTF-8读取输入,匹配PowerShell的编码:

# 让Ruby以UTF-8编码读取控制台输入
Encoding.default_external = Encoding::UTF_8

print "1> "
line1 = gets.chomp
print "2> "
line2 = gets.chomp
print "3> "
line3 = gets.chomp

puts line1 + line2 + line3

或者也可以在每次调用gets时单独指定编码:

print "1> "
line1 = gets(encoding: Encoding::UTF_8).chomp
# 后续的line2、line3同理处理

办法2:调整PowerShell的编码为CP932

如果不想修改代码,可以在运行Ruby脚本前,先在PowerShell里执行以下命令切换编码:

chcp 932

这个命令会把控制台的输入输出编码切换为日文Shift-JIS(CP932),和Ruby默认的输入编码匹配,输入的日文就能被正确解析了。

额外验证小技巧

你可以先在PowerShell里执行这两个命令,查看当前控制台的编码:

[Console]::InputEncoding
[Console]::OutputEncoding

如果显示的是UTF-8,那就能确认是编码不匹配导致的乱码问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:03:23