2012-04-15 10 views
8

Aquí está el problema: podría tener cadenas que son UTF-8, y podría tener cadenas que son US-ASCII. Independientemente de la codificación, me gustaría que YAML.dump (str) descargue realmente los objetos String, en lugar de estos objetos inútiles !binary como se muestra en el ejemplo.¿Cómo obtengo YAML en Ruby desde 1.9.3 para volcar cadenas ASCII-8Bit como cadenas?

¿Hay una bandera o algo que no veo para forzar a YAML.dump() a hacer lo correcto?

de Ruby 1.9.1 ejemplo

YAML::VERSION    # "0.60" 
a = "foo"     # => "foo" 
a.force_encoding("BINARY") # => "foo" 
YAML.dump(a)    # => "--- foo\n" 

de Ruby 1.9.3 ejemplo

YAML::VERSION    # "1.2.2" 
a = "foo"     # => "foo" 
a.force_encoding("BINARY") # => "foo" 
YAML.dump(a)    # => "--- !binary |-\n Zm9v\n" 

Actualización: Tengo mi propia respuesta

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

Por lo tanto, parece que usar el viejo motor de yamler con fuerza el antiguo comportamiento.

+1

¿Por qué estás forzando la codificación a 'BINARY' en el primer lugar? –

+0

Porque a veces estoy tratando con cadenas binarias, como "\ xFE \ xFF \ x00 \ x00" y no quiero UTF-8isms. –

+0

Además, aquí, es solo un ejemplo. Mi caso de uso real es un poco más complicado :) –

Respuesta

4

Actualización: Tengo mi propia respuesta

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

Forzar un analizador de YAML obsoleto en todo el mundo no es un buen camino a seguir, me encantaría obtener más respuestas sobre esta cuestión – bbozo

Cuestiones relacionadas