質問

私を信じてチームの文字列に特殊なコードの脱出したい店エスケープ解除-例えば、通訳を示して

"\\014\"\\000\"\\016smoothing\"\\011mean\"\\022color\"\\011zero@\\016" していきたいと思っています(時の検査) "\014\"\000\"\016smoothing\"\011mean\"\022color\"\011zero@\016"

その方法unescapeょうか。うmake a regexの除去を1バックスラッシュからの連nバックスラッシュが持っていない多くのregexの経験とのようであるべき"よりエレガント"について教えてください。

たとえば、 puts MyString を表示するように出力さいものかどう捉えることに変更します。

よろしく!

編集追加コンテクスト:私はこのクラスにするために使われている整理/修復をもた時の復旧いくつかの古い文字列で吐出タイプエラーを思決定がな--一部説明の理由--として格納されbase64.その代わりにされて逃れるたくないので、い戻し同様に、TypeError TypeError: incompatible marshal file format (can't be read) format version 4.8 required; 92.48 given でMarshalの最初の文字の文字列を決定する形式です。

require 'base64'
class MarshaledStuff < ActiveRecord::Base

  validates_presence_of :marshaled_obj

  def contents
    obj = self.marshaled_obj
    return Marshal.restore(Base64.decode64(obj))
  end

  def contents=(newcontents)
    self.marshaled_obj = Base64.encode64(Marshal.dump(newcontents))
  end
end

編集2:変更語で言うと思った"ダブル-ケ"でシングル-エスケープされます。絵!

役に立ちましたか?

解決

あなたの文字列は、あなたが、彼らはすでに正しくエスケープされているし、それらを印刷し、正しい出力が得られた場合。あなたはあなたがそれらをより少なく曖昧にするために変数を表示するとき、あなたのための余分なバックスラッシュを追加し、対話型インタプリタでそれらを表示しているので、あなたが見る余分なバックスラッシュは、おそらくされます。

> x
=> "\\"
> puts x
\
=> nil
> x.length
=> 1

xは、2つのバックスラッシュが含まれているように見えるにもかかわらず、文字列の長さが1であることに注意してください。余分なバックスラッシュはインタプリタによって追加され、実際には文字列の一部ではありません。

あなたはまだ問題があると思うならば、あなたは、あなたの質問に言及したことを文字列が表示されている方法の詳細について具体的に説明してくださいます。

<時間>

編集:あなたの例では必要のアンエスケープは、8進数のエスケープコードであることを唯一のもの。あなたはこれを試すことができます:

x = x.gsub(/\\[0-2][0-7]{2}/){ |c| c[1,3].to_i(8).chr }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top