【问题标题】:ruby unicode escapes as command line argumentsruby unicode 转义为命令行参数
【发布时间】:2013-02-01 03:05:56
【问题描述】:

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

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

unicode = ARGV[0] #command line argument is \u263a
puts unicode
puts unicode.inspect
=> u263a
=> "u263a"

将字符串视为 unicode 序列所需的正斜杠被剥离。 然后,如果我们尝试添加另一个“\”来转义它,

unicode = ARGV[0] #command line argument is \\u263a
puts unicode
puts unicode.inspect
=> \u263a
=> "\\u263a"    

但仍无法正确处理。

这里有一些更相关的代码,我实际上正在尝试实现这一点:

unicode   = ARGV[0]
filetype  = ARGV[1]
path = unicode + "." + filetype

File.new(path, "w")

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

【问题讨论】:

  • 这只是this question 加上shell 吃掉你的反斜杠的复杂性吗? ActiveSupport::JSON.decode 在任何情况下都可能有用。
  • 类似,但是,主要问题是外壳正在吃我的反斜杠。
  • 每个人都想使用反斜杠作为转义字符,所以有时你必须将它们加倍、三倍、四倍……它们。有什么理由不能通过参数传递 UTF-8 字符串?
  • 老实说,我不确定——你能举个例子吗?
  • 为什么不直接说your_script µ?我想我不明白你为什么要搞乱所有这些反斜杠的东西,如果你有一个包含非 ASCII 字符的文件名,那为什么还要关心呢?

标签: ruby unicode-escapes


【解决方案1】:

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

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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 2011-07-24
    • 2011-07-27
    • 1970-01-01
    • 2020-08-20
    • 2012-02-25
    • 1970-01-01
    • 2019-09-16
    相关资源
    最近更新 更多