سؤال

لدي مجموعة من السلسلة مع رموز الهروب الخاصة التي أرغب في تخزينها دون تكييف ، على سبيل المثال ، يظهر المترجم المترجم

"\\014\"\\000\"\\016smoothing\"\\011mean\"\\022color\"\\011zero@\\016"لكني أريد أن تظهر (عند التفتيش) كما"\014\"\000\"\016smoothing\"\011mean\"\022color\"\011zero@\016"

ما هي طريقة إلغاء التعبير عنهم؟ أتصور أنه يمكنني صنع regex لإزالة واحدة من التراجع الخلفي من كل لقطات متتالية ، لكن ليس لدي الكثير من تجربة regex ويبدو أنه يجب أن تكون هناك طريقة "أكثر أناقة" للقيام بذلك.

على سبيل المثال ، عندما أنا puts MyString يعرض الإخراج الذي أحبه ، لكنني لا أعرف كيف يمكنني التقاط ذلك إلى متغير.

شكرًا!

تم تحريره لإضافة سياق: لدي هذا الفئة التي يتم استخدامها في حشد / استعادة بعض الأشياء ، ولكن عندما أسترجع بعض الأوتار القديمة ، فإنه يبصق على خطأ في النوع الذي حددته هو أنها لم تكن كذلك - لسبب ما لا يمكن تفسيره - مخزنة كما base64. وبدلاً من ذلك يبدو أنهم قد هربوا للتو ، وهو ما لا أريده ، لأن محاولة استعادتها بمثابة تعطي نوع typeerrorTypeError: incompatible marshal file format (can't be read) format version 4.8 required; 92.48 givenلأن المارشال ينظر إلى الأحرف الأولى من السلسلة لتحديد التنسيق.

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 يحتوي على اثنين من الانزلاق الخلفي ، فإن طول السلسلة هو واحد. يضاف المترجم المترجم الإضافي عن طريق المترجم وليست جزءًا من السلسلة.

إذا كنت لا تزال تعتقد أن هناك مشكلة ، فيرجى أن تكون أكثر تحديدًا حول كيفية عرض الأوتار التي ذكرتها في سؤالك.


تحرير: في المثال الخاص بك ، الشيء الوحيد الذي يحتاج إلى التخلص من رموز الهروب الثمانية. يمكنك تجربة هذا:

x = x.gsub(/\\[0-2][0-7]{2}/){ |c| c[1,3].to_i(8).chr }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top