ruby 1.8.7 mengapa .to_yaml mengubah beberapa String menjadi byte yang tidak dapat dibaca

Mengurai beberapa halaman web dengan nokogiri, saya mengalami beberapa masalah saat membersihkan beberapa String dan menyimpannya dengan YAML. Untuk mereproduksi masalah, lihat sesi IRB ini yang mereproduksi masalah yang sama:

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"

Singkatnya, terkadang keluaran .to_yaml dapat dibaca sementara di lain waktu keluarannya tidak dapat dibaca. Aspek yang paling menarik adalah stringnya sangat mirip.

Bagaimana saya bisa menghindari keluaran !binary ... itu?


person marcel massana    schedule 27.09.2011    source sumber
comment
Lihat juga stackoverflow.com/questions/9550330/.   -  person Eric Walker    schedule 09.07.2014


Jawaban (1)


Apakah YAML lebih memilih untuk membuang string sebagai teks atau biner adalah masalah rasio antara karakter ASCII dan non ASCII.

Jika Anda ingin menghindari !binary sebisa mungkin, Anda harus menggunakan permata ya2yaml. Ia berusaha keras untuk membuang string saat ASCII + lolos dari UTF-8.

person gioele    schedule 29.09.2011