Oto problem: Mogę mieć ciągi znaków w formacie UTF-8 i mogę mieć łańcuchy znaków US-ASCII. Bez względu na kodowanie, chciałbym, aby YAML.dump (str) faktycznie zrzutu obiektów String
, zamiast tych nieprzydatnych obiektów !binary
, jak pokazuje przykład.Jak uzyskać YAML w Rubim z 1.9.3, aby zrzucić ciągi ASCII-8Bit jako łańcuchy?
Czy istnieje flaga lub coś, czego nie widzę, aby zmusić YAML.dump() do robienia właściwych rzeczy?
Ruby 1.9.1 Przykład
YAML::VERSION # "0.60"
a = "foo" # => "foo"
a.force_encoding("BINARY") # => "foo"
YAML.dump(a) # => "--- foo\n"
Ruby 1.9.3 Przykład
YAML::VERSION # "1.2.2"
a = "foo" # => "foo"
a.force_encoding("BINARY") # => "foo"
YAML.dump(a) # => "--- !binary |-\n Zm9v\n"
Aktualizacja: Masz własną rękę odpowiedź
YAML::ENGINE.yamler='syck'
YAML.dump(a) # => "--- foo\n"
Wygląda więc na to, że używa się starego silnika odrzutu, wymuszając stare zachowanie.
Czemu zmuszając kodowanie do 'BINARY' w pierwszej kolejności? –
Ponieważ czasami mam do czynienia z ciągów binarnych, takich jak "\ xFE \ xFF \ x00 \ x00" i nie chcę UTF-8izmów. –
Poza tym, jest to tylko przykład. Moje prawdziwe użycie jest nieco bardziej skomplikowane :) –