ruby unicode作为命令行参数转义

ruby unicode作为命令行参数转义,ruby,unicode-escapes,Ruby,Unicode Escapes,这个问题似乎是由一个python开发人员()提出的,我认为这部分是相关的,但它并没有完全为我在Ruby中遇到的直接问题提供解决方案。我很好奇是否有办法将转义的unicode序列作为命令行参数,分配给变量,然后在脚本运行后将转义的unicode处理并显示为普通unicode。基本上,我希望能够选择一个unicode数字,然后让Ruby将其粘贴到文件名中,并显示实际的unicode字符 以下是我注意到的一些问题: unicode=ARGV[0]#命令行参数是\u263a 输入unicode 放uni

这个问题似乎是由一个python开发人员()提出的,我认为这部分是相关的,但它并没有完全为我在Ruby中遇到的直接问题提供解决方案。我很好奇是否有办法将转义的unicode序列作为命令行参数,分配给变量,然后在脚本运行后将转义的unicode处理并显示为普通unicode。基本上,我希望能够选择一个unicode数字,然后让Ruby将其粘贴到文件名中,并显示实际的unicode字符

以下是我注意到的一些问题:

unicode=ARGV[0]#命令行参数是\u263a
输入unicode
放unicode.inspect
=>u263a
=>“u263a”
将字符串视为unicode序列所需的正斜杠被剥离。 然后,如果我们尝试添加另一个“\”来逃避它

unicode=ARGV[0]#命令行参数为\\u263a
输入unicode
放unicode.inspect
=>\u263a
=>“\\u263a”
但它仍然不能被正确处理

下面是一些更相关的代码,我正试图实现这一点:

unicode=ARGV[0]
filetype=ARGV[1]
路径=unicode+“+”文件类型
新文件(路径“w”)

看起来这应该很简单,但我搜索了又搜索,找不到解决方案。我应该补充一点,我知道在字符串中提供硬编码的转义unicode很好,就像
File.new(“\u263a.{filetype}”,“w”)
,但是从参数/变量获取它是我遇到的问题。我使用的是Ruby 1.9.2。

为了取消unicode转义命令行参数的转义,并在文件名中使用用户提供的unicode字符串创建一个新文件,我使用了
@mu太短了
unpack
,如下所示:

filetype  = ARGV[1]
unicode   = ARGV[0].gsub(/\\u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")}
path      = unicode + "." + filetype
File.new(path, "w")

为了取消unicode转义命令行参数的scape并在文件名中使用用户提供的unicode字符串创建一个新文件,我使用了
@mu太短了
unpack
,如下所示:

filetype  = ARGV[1]
unicode   = ARGV[0].gsub(/\\u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")}
path      = unicode + "." + filetype
File.new(path, "w")

这仅仅是因为炮弹吃掉了你的反斜杠而增加了复杂性吗
ActiveSupport::JSON.decode
在任何情况下都可能有用。类似,但是的,主要问题是shell吃了我的反斜杠。每个人都想将反斜杠用作转义字符,所以有时你必须加倍、三倍、四倍。。。他们。有什么原因不能通过参数传递UTF-8字符串吗?老实说,我不确定--你能举个例子吗?为什么不直接说
你的脚本µ
?我想我不明白你为什么要摆弄这些反斜杠的东西,如果你的文件名包含非ASCII字符,那么为什么会有任何事情关心这个呢?这是不是因为shell占用了你的反斜杠而增加了复杂性
ActiveSupport::JSON.decode
在任何情况下都可能有用。类似,但是的,主要问题是shell吃了我的反斜杠。每个人都想将反斜杠用作转义字符,所以有时你必须加倍、三倍、四倍。。。他们。有什么原因不能通过参数传递UTF-8字符串吗?老实说,我不确定--你能举个例子吗?为什么不直接说
你的脚本µ
?我想我不明白你为什么要摆弄这些反斜杠的东西,如果你有一个包含非ASCII字符的文件名,那为什么会有什么事关心它呢?