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

