2012-04-15 8 views
8

Đâ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ũ.

+1

Tại sao các bạn buộc mã hóa cho 'BINARY' ở nơi đầu tiên? –

+0

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. –

+0

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 :) –

Trả lời

4

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" 
+1

Việc buộc một trình phân tích cú pháp YAML lỗi thời trên toàn cầu không phải là một cách hay để thực hiện, rất muốn nhận thêm câu trả lời cho câu hỏi này – bbozo