ruby 1.8.7 เหตุใด .to_yaml จึงแปลงสตริงบางส่วนเป็นไบต์ที่ไม่สามารถอ่านได้

เมื่อแยกวิเคราะห์หน้าเว็บบางหน้าด้วย nokogiri ฉันมีปัญหาบางอย่างขณะทำความสะอาดสตริงบางส่วนและบันทึกด้วย YAML หากต้องการจำลองปัญหาอีกครั้ง ดูเซสชัน IRB ที่ทำให้เกิดปัญหาเดียวกันนี้:

irb(main):001:0> require 'yaml'
=> true
irb(main):002:0> "1,000 €".to_yaml
=> "--- !binary |\nMSwwMDAg4oKs\n\n"
irb(main):003:0> "1,0000 €".to_yaml
=> "--- \"1,0000 \\xE2\\x82\\xAC\"\n"
irb(main):004:0> "1,00 €".to_yaml
=> "--- !binary |\nMSwwMCDigqw=\n\n"
irb(main):005:0> "1 €".to_yaml
=> "--- !binary |\nMSDigqw=\n\n"
irb(main):006:0> "23 €".to_yaml
=> "--- !binary |\nMjMg4oKs\n\n"
irb(main):007:0> "12000 €".to_yaml
=> "--- !binary |\nMTIwMDAg4oKs\n\n"
irb(main):008:0> "1200000 €".to_yaml
=> "--- \"1200000 \\xE2\\x82\\xAC\"\n"
irb(main):009:0> "120000 €".to_yaml
=> "--- \"120000 \\xE2\\x82\\xAC\"\n"
irb(main):010:0> "12000 €".to_yaml
=> "--- !binary |\nMTIwMDAg4oKs\n\n"

โดยสรุป บางครั้งเอาต์พุต .to_yaml สามารถอ่านได้ ในขณะที่บางครั้งเอาต์พุตไม่สามารถอ่านได้ สิ่งที่น่าสนใจที่สุดคือสายมีความคล้ายคลึงกันมาก

ฉันจะหลีกเลี่ยง !binary ... ผลลัพธ์เหล่านั้นได้อย่างไร


person marcel massana    schedule 27.09.2011    source แหล่งที่มา
comment
ดูเพิ่มเติมที่ stackoverflow.com/questions/9550330/.   -  person Eric Walker    schedule 09.07.2014


คำตอบ (1)


การที่ YAML ต้องการดัมพ์สตริงเป็นข้อความหรือไบนารี่นั้น เป็นเรื่องของอัตราส่วนระหว่างอักขระ ASCII และอักขระที่ไม่ใช่ ASCII

หากคุณต้องการหลีกเลี่ยง !binary ให้มากที่สุด คุณควรใช้อัญมณี ya2yaml พยายามถ่ายโอนข้อมูลสตริงอย่างหนักเนื่องจาก ASCII + หนี UTF-8

person gioele    schedule 29.09.2011