1

この質問は Python 開発者 (コマンドライン引数としての Unicode エスケープの入力を許可する) によって尋ねられたようですが、これは部分的に関連していると思いますが、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 を使用しています。

4

1 に答える 1

1

Unicodeでエスケープされたコマンドライン引数をエスケープ解除し、ファイル名にユーザーが指定したUnicode文字列を含む新しいファイルを作成するために、とを使用@mu is too shortする方法を使用packしまし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")
于 2013-03-02T02:15:45.720 に答える