gpt4 book ai didi

ruby - 如何在 Windows 上从 Ruby 运行非 ASCII/Unicode shell 命令?

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:17 24 4
gpt4 key购买 nike

我想不出正确的方法来编码 shell 命令以在 Windows 上从 Ruby 运行。以下脚本重现了该问题:

# encoding: utf-8

def test(word)
returned = `echo #{word}`.chomp
puts "#{word} == #{returned}"
raise "Cannot roundtrip #{word}" unless word == returned
end

test "good"

test "bÃd"

puts "Success"

# win7, cmd.exe font set to Lucinda Console, chcp 65001
# good == good
# bÃd == bÃd

这是 Ruby 中的错误,还是我需要在将命令字符串传递给 cmd.exe 进程之前将其手动编码为特定编码?

更新:我想澄清一下,问题不在于将输出读回 Ruby,而在于将命令发送到 shell。演示:

# encoding: utf-8

File.open("bbbÃd.txt", "w") do |f|
f.puts "nothing to see here"
end

filename = Dir.glob("bbb*.txt").first
command = "attrib #{filename}"

puts command.encoding

puts "#{filename} exists?: #{ File.exists?(filename) }"
system command
File.delete(filename)

#=>
# UTF-8
# bbbÃd.txt exists?: true
# File not found - bbbÃd.txt

您可以看到文件已正确创建,File.exists? 方法确认 Ruby 可以看到它,但是当我尝试运行 attrib 命令时它,它正在尝试使用不同的文件名。

最佳答案

尝试像这样设置环境变量 LC_CTYPE:

 LC_CTYPE=en_US.UTF-8

在命令 shell 或 Ruby 脚本中全局设置:

ENV['LC_CTYPE']='en_US.UTF-8' 

关于ruby - 如何在 Windows 上从 Ruby 运行非 ASCII/Unicode shell 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19522153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com