2012-04-15 26 views
8

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.

+1

Czemu zmuszając kodowanie do 'BINARY' w pierwszej kolejności? –

+0

Ponieważ czasami mam do czynienia z ciągów binarnych, takich jak "\ xFE \ xFF \ x00 \ x00" i nie chcę UTF-8izmów. –

+0

Poza tym, jest to tylko przykład. Moje prawdziwe użycie jest nieco bardziej skomplikowane :) –

Odpowiedz

4

Aktualizacja: Masz własną rękę odpowiedź

YAML::ENGINE.yamler='syck' 
YAML.dump(a)    # => "--- foo\n" 
+1

Wymuszenie przestarzałego parsera YAML na całym świecie nie jest dobrym rozwiązaniem, chciałbym uzyskać więcej odpowiedzi na to pytanie – bbozo