fork(2) download
  1. # Author: sholmes
  2.  
  3. puts '--- 1 ---'
  4. # まず、Ruby1.9系ではリテラルが用意されているようです。
  5. # \から始める形式であれば、そのままダブルクオートしてやればOKでしょう
  6. puts "\u3053\u3060\u308F"
  7. # シングルだと無視されるのは、\nとかと同じですね
  8. puts '\u3053\u3060\u308F'
  9.  
  10. puts '--- 2 ---'
  11. # 表記上の解釈結果であるため、コード上直接書かずにどっかから持ってきたデータには注意が必要です。
  12. ARGF.each do |line|
  13. # この三つは無効
  14. puts line
  15. puts "#{line}"
  16. puts "\"#{line}\""
  17.  
  18. # このように認識させて、初めて有効となります。
  19. puts eval("\"#{line}\"")
  20. end
  21.  
  22. puts '--- 3 ---'
  23. # %でエスケープ?する形式には対応していないようです。
  24. puts "%u3053%u3060%u308F"
  25. # この%から始める記法がどういった場面で用いられるのかは分からないのですが、必要であれば都度置換する感じでしょうか
  26. # ついでなので、%の場合は\に変換した上で、文字列からこのエスケープ理解を可能にするメソッドを定義してみます。
  27. # とはいえ、こうやってeval使うぐらいだったら自力解析のほうが良いかもしれません
  28.  
  29. class String
  30. def ues
  31. eval("\"#{gsub(/(%)(u[\da-f]{4})/i){"\\#{$2}"}}\"")
  32. end
  33. end
  34.  
  35. puts '--- Summary ---'
  36. # 無効
  37. puts '\u3053\u3060\u308F'
  38. # 有効
  39. puts "\u3053\u3060\u308F"
  40. # 有効
  41. puts '\u3053\u3060\u308F'.ues
  42. # 無効
  43. puts "%u3053%u3060%u308F"
  44. # 有効
  45. puts '%u3053%u3060%u308F'.ues
  46. # 難点としては、evalかけると他のエスケープまで解釈されてしまう事でしょうか・・・
  47. puts '%u3053%u3060\t%u308F'.ues
Success #stdin #stdout 0s 4760KB
stdin
\u3053\u3060\u308F
stdout
--- 1 ---
こだわ
\u3053\u3060\u308F
--- 2 ---
\u3053\u3060\u308F
\u3053\u3060\u308F
"\u3053\u3060\u308F"
こだわ
--- 3 ---
%u3053%u3060%u308F
--- Summary ---
\u3053\u3060\u308F
こだわ
こだわ
%u3053%u3060%u308F
こだわ
こだ	わ