Đây là vấn đề: Tôi có thể có các chuỗi là UTF-8 và tôi có thể có các chuỗi là US-ASCII. Bất kể mã hóa, tôi muốn YAML.dump (str) thực sự đổ các đối tượng String
, thay vì các đối tượng !binary
vô ích này như ví dụ cho thấy.Làm cách nào để lấy YAML trong Ruby kể từ 1.9.3 để kết xuất chuỗi ASCII-8Bit thành chuỗi?
Có cờ hay thứ gì đó mà tôi không thấy ép buộc YAML.dump() làm điều đúng không?
của Ruby 1.9.1 dụ
YAML::VERSION # "0.60"
a = "foo" # => "foo"
a.force_encoding("BINARY") # => "foo"
YAML.dump(a) # => "--- foo\n"
của Ruby 1.9.3 dụ
YAML::VERSION # "1.2.2"
a = "foo" # => "foo"
a.force_encoding("BINARY") # => "foo"
YAML.dump(a) # => "--- !binary |-\n Zm9v\n"
Cập nhật: Got câu trả lời của riêng tôi
YAML::ENGINE.yamler='syck'
YAML.dump(a) # => "--- foo\n"
Vì vậy, trông giống như sử dụng động cơ yamler cũ với lực lượng hành vi cũ.
Tại sao các bạn buộc mã hóa cho 'BINARY' ở nơi đầu tiên? –
Bởi vì đôi khi tôi xử lý các chuỗi nhị phân, như "\ xFE \ xFF \ x00 \ x00" và tôi không muốn UTF-8isms. –
Bên cạnh đó, ở đây, nó chỉ là một ví dụ. Trường hợp sử dụng thực sự của tôi hơi phức tạp hơn một chút :) –