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

Windows PowerShell中Ruby IO流重定向文件编码异常的原因及解决咨询

问题原因

Windows 7的PowerShell默认将**UTF-16LE(即你看到的Unicode)**作为重定向输出的编码,这是Shell层面的行为,和Ruby的-E UTF-8设置无关。当你用>重定向Ruby的输出时,PowerShell会把Ruby输出的UTF-8内容转成UTF-16LE写入文件,导致后续读取时出现乱码。

解决方法
  • 修改PowerShell输出编码:
    执行重定向命令前,先设置PowerShell的输出编码为UTF-8:

    $OutputEncoding = [Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8
    

    之后再运行你的Ruby命令:

    ruby -E UTF-8 -e "puts 'どうぞよろしくお願いします,Mr Jason'" > test.txt
    
  • 让Ruby直接写入文件:
    绕开Shell重定向,直接由Ruby控制文件编码写入:

    ruby -E UTF-8 -e "File.write('test.txt', 'どうぞよろしくお願いします,Mr Jason' + \"\n\", encoding: 'UTF-8')"
    
  • 使用Out-File指定编码:
    用PowerShell的Out-File命令替代>,并明确指定UTF-8编码:

    ruby -E UTF-8 -e "puts 'どうぞよろしくお願いします,Mr Jason'" | Out-File -Encoding UTF8 test.txt
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:10:49