के लिए गलत डेटा लौटा रहा है। मैं कुछ JSON को JSON.parse
का उपयोग करके बच निकले हुए यूनिकोड वर्णों को पार्स करने का प्रयास कर रहा हूं। लेकिन एक मशीन पर, json/ext
का उपयोग करके, यह गलत मान देता है। उदाहरण के लिए, \u2030
को UTF-8 में E2 80 B0
वापस करना चाहिए, लेकिन इसके बजाय मुझे 01 00 00
मिल रहा है। यह या तो बच निकले "\\u2030"
या अनदेखा "\u2030"
से विफल रहता है।रूबी JSON.parse यूनिकोड
1.9.2p180 :001 > require 'json/ext'
=> true
1.9.2p180 :002 > s = JSON.parse '{"f":"\\u2030"}'
=> {"f"=>"\u0001\u0000\u0000"}
1.9.2p180 :003 > s["f"].encoding
=> #<Encoding:UTF-8>
1.9.2p180 :004 > s["f"].valid_encoding?
=> true
1.9.2p180 :005 > s["f"].bytes.map do |x| x; end
=> [1, 0, 0]
यह मेरी अन्य मशीन पर रूबी और इसी तरह के पर्यावरण चर के समान संस्करण के साथ काम करता है। दोनों मशीनों पर Gemfile.lock समान है, जिसमें json (= 1.6.3)
शामिल है। यह दोनों मशीनों पर json/pure
के साथ काम करता है।
1.9.2p180 :001 > require 'json/pure'
=> true
1.9.2p180 :002 > s = JSON.parse '{"f":"\\u2030"}'
=> {"f"=>"‰"}
1.9.2p180 :003 > s["f"].encoding
=> #<Encoding:UTF-8>
1.9.2p180 :004 > s["f"].valid_encoding?
=> true
1.9.2p180 :005 > s["f"].bytes.map do |x| x; end
=> [226, 128, 176]
तो क्या मेरे पर्यावरण या सेटअप में कुछ और है जो इसे गलत तरीके से पार्स कर सकता है?
युक्ति: 's [" f "]। Bytes.to_a' – Phrogz
विफल होने वाली मशीन पर 'foo'encoding'' क्या है? क्या आपके पास अपने स्रोत कोड के शीर्ष पर एक एन्कोडिंग टिप्पणी है? – Phrogz
'foo'encoding'' मशीनों पर एन्कोडिंग: यूटीएफ -8> 'है। मैंने इनपुट के साथ समस्या को पुन: उत्पन्न किया है जो ASCII-8BIT है। मुझे लगता है कि इससे कोई फर्क नहीं पड़ता, क्योंकि इनपुट के बचने वाले संस्करण सभी 7-बिट ASCII हैं। – bklimt