2013-02-16 114 views
1

看起來這個問題已經被python開發者(Allowing input of Unicode escapes as command line arguments)詢問過了,我認爲這部分涉及到了這個問題,但是它並沒有完全給我一個解決我在Ruby中遇到的直接問題的解決方案。我很好奇,如果有一種方法可以將轉義的unicode序列作爲命令行參數,分配給一個變量,然後在腳本運行後將轉義的unicode作爲普通的unicode進行處理和顯示。基本上,我希望能夠選擇一個unicode號碼,然後讓Ruby將其粘貼到一個文件名中,並顯示實際的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。

+0

這是隻是[這個問題](http://stackoverflow.com/q/5560914/479863)與外殼吃反斜槓的額外複雜?無論如何,「ActiveSupport :: JSON.decode」可能是有用的。 – 2013-02-16 04:39:21

+0

類似的,但是,主要的問題是shell正在吃我的反斜槓。 – cwade 2013-02-18 17:46:22

+0

每個人都希望使用反斜槓作爲轉義字符,所以有時你必須使用雙倍,三倍,四倍...等等。有什麼理由不能通過參數傳遞一個UTF-8字符串嗎? – 2013-02-18 18:51:59

回答

1

要取消轉義Unicode的轉義命令行參數,並創建一個新的文件,在文件名中的用戶提供的unicode字符串,我用@mu is too short「使用packunpack,像這樣第method

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