2012-04-15 19 views
8

यहां समस्या है: मेरे पास स्ट्रिंग्स हो सकते हैं जो यूटीएफ -8 हैं, और मेरे पास स्ट्रिंग्स हो सकते हैं जो यूएस-एएससीआईआई हैं। एन्कोडिंग के बावजूद, मैं उदाहरण के रूप में इन बेकार !binary ऑब्जेक्ट्स के बजाय, YAML.dump (str) वास्तव में String ऑब्जेक्ट्स को डंप करना चाहता हूं।एएससीआईआई -8 बिट तारों को स्ट्रिंग के रूप में डंप करने के लिए मुझे 1.9.3 के रूप में रूबी में वाईएएमएल कैसे प्राप्त होगा?

क्या कोई झंडा या कुछ है जो मैं सही चीज़ करने के लिए YAML.dump() को मजबूर करने के लिए नहीं देख रहा हूं?

रूबी 1.9.1 उदाहरण

YAML::VERSION    # "0.60" 
a = "foo"     # => "foo" 
a.force_encoding("BINARY") # => "foo" 
YAML.dump(a)    # => "--- foo\n" 

रूबी 1.9.3 उदाहरण

YAML::VERSION    # "1.2.2" 
a = "foo"     # => "foo" 
a.force_encoding("BINARY") # => "foo" 
YAML.dump(a)    # => "--- !binary |-\n Zm9v\n" 

अद्यतन: समझे अपने खुद के जवाब

YAML::ENGINE.yamler='syck' 
YAML.dump(a)    # => "--- foo\n" 

तो पुराना व्यवहार बल के साथ पुराने यमरर इंजन का उपयोग करना प्रतीत होता है।

+1

क्यों आप पहली जगह में 'BINARY' लिए एन्कोडिंग के लिए मजबूर कर रहे हैं? –

+0

क्योंकि कभी-कभी मैं बाइनरी तारों से निपट रहा हूं, जैसे "\ xFE \ xFF \ x00 \ x00" और मैं यूटीएफ -8ISMS नहीं चाहता हूं। –

+0

इसके अलावा, यह सिर्फ एक उदाहरण है। मेरा असली उपयोग मामला थोड़ा अधिक जटिल है :) –

उत्तर

4

अद्यतन: अपने ही जवाब मिल गया

YAML::ENGINE.yamler='syck' 
YAML.dump(a)    # => "--- foo\n" 
+1

विश्वव्यापी अप्रचलित वाईएएमएल पार्सर को मजबूर करना एक अच्छा तरीका नहीं है, इस सवाल पर अधिक जवाब प्राप्त करना अच्छा लगेगा – bbozo