Windows下Ruby重定向输出为UTF-8编码文件的问题求助
解决方案:Windows下Ruby重定向输出为UTF-8编码文件
问题根源
Windows控制台的默认重定向编码并非UTF-8(通常是系统ANSI编码或UTF-16),即使Ruby通过-E UTF-8指定编码,系统层面的重定向仍会将输出转码为Unicode(UTF-16),导致读取时乱码。
可行方案
方案1:切换控制台编码为UTF-8
Windows控制台通过代码页控制编码,切换到UTF-8代码页(65001)后,重定向的输出会直接采用UTF-8编码:
- 先执行编码切换命令:
chcp 65001 - 执行写入命令:
ruby -E UTF-8 -e "puts '汤姆,Welcome to my home'" > test.txt - 读取时同样先切换编码:
chcp 65001 ruby -E UTF-8 -e "puts gets" < test.txt
方案2:Ruby代码内强制指定流编码
绕过系统控制台编码限制,直接在Ruby代码中强制设置标准输出/输入的编码,确保输出为UTF-8:
- 写入命令(强制STDOUT编码为UTF-8):
若需明确指定外部编码转换,可写成:ruby -e "STDOUT.set_encoding('UTF-8'); puts '汤姆,Welcome to my home'" > test.txtruby -e "STDOUT.set_encoding('UTF-8', 'UTF-8'); puts '汤姆,Welcome to my home'" > test.txt - 读取命令(强制STDIN编码为UTF-8):
ruby -e "STDIN.set_encoding('UTF-8'); puts gets" < test.txt
补充说明
- 方案1需要每次执行Ruby命令前切换编码,适合临时操作;
- 方案2直接在Ruby层面控制编码,不依赖控制台设置,更稳定可靠。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

