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

Windows系统下Ruby调用gets无法识别CJK字符及打印异常问题咨询

问题根因

  • Windows原生控制台的编码逻辑与Ruby默认外部编码配置不匹配,你设置的Encoding.default_external = UTF-8仅覆盖了Ruby层的默认输出编码,未适配控制台的输入编码映射规则。
  • Windows 10默认预装的PowerShell 5.x编码处理存在兼容性缺陷,$PSDefaultParameterValues仅作用于PowerShell自身的cmdlet,对Ruby这类第三方可执行程序的标准输入输出完全不生效。
  • Ruby的gets方法输入编码默认继承控制台当前代码页,你之前仅配置了输出侧的UTF-8规则,未强制指定输入编码的转换逻辑。

可行解决方案

通用适配方案(cmd、PowerShell均生效)

  • 运行Ruby脚本时强制指定输入输出编码,执行命令如下:
    ruby -E UTF-8:UTF-8 你的脚本名称.rb
  • 如需全局生效,可在系统环境变量中新增RUBYOPT变量,值设置为-EUTF-8:UTF-8,配置完成后所有Ruby进程启动时会自动强制输入输出编码为UTF-8,无需额外加参数。
  • 可在脚本开头显式指定标准输入输出的编码,添加以下两行代码即可:
    $stdin.set_encoding(Encoding::UTF_8)
    $stdout.set_encoding(Encoding::UTF_8)
    

PowerShell专属修复方案

  • 优先升级到PowerShell 7+版本,新版本默认采用UTF-8作为全局编码,对第三方程序的IO编码兼容性大幅提升,无需额外配置即可正常处理CJK字符。
  • 如暂不升级,每次打开PowerShell后先执行以下命令再运行Ruby脚本:
    chcp 65001
    $OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8
    

额外全局优化方案

  • 可进入「控制面板-区域-管理-更改系统区域设置」,勾选「Beta版:使用Unicode UTF-8提供全球语言支持」,重启系统后生效,可彻底解决Windows全场景下的多语言编码兼容问题。
  • 测试时不要使用Vim的:!命令在内嵌终端直接运行Ruby脚本,Windows下Vim内嵌终端编码适配存在已知问题,建议单独打开控制台窗口运行测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:24:03