YAML: erreur d'analyse d'une chaîne de caractères avec échappé à double quote
Ruby 2.0, Yaml à l'aide de Psy semble avoir de la difficulté à s'échapper les guillemets doubles. Quelqu'un a une idée sur la résolution de ce?
data_ =<<END_
description: "Acme acquires ILM: Lucas says \"Inevitable!\""
END_
ap YAML.load(data_)
produit
/Users/x/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/psych.rb:205:in `parse': (<unknown>): did not find expected key while parsing a block mapping at line 1 column 1 (Psych::SyntaxError)
Échapper à l'entrée avec des guillemets simples fonctionne, mais si elle contient des apostrophes, échapper entraîne une erreur, trop.
description: 'Acme acquires ILM: Lucas says "It\'s Inevitable!"'
Dans un monde idéal, les entrées contiennent des bon unicode typographique des guillemets, mais je n'ai pas de contrôle sur ces (bien que je puisse les remplacer avant de traiter avec YAML)...
Toutes les idées sur YAML analyser correctement?
Mise à jour: répondre à ma question. Découvert qu'il est possible d'échapper à une seule citation de duplication, de sorte que cela fonctionne:
description: 'Acme acquires ILM: Lucas says "It''s Inevitable!"'
J'ai découvert cela en utilisant le format YAML.dump(la-désiré-chaîne)
OriginalL'auteur aaandre | 2013-10-11
Vous devez vous connecter pour publier un commentaire.
Votre problème, c'est que heredocs agissent comme des chaînes entre guillemets doubles autant que l'échappement est concerné. Cela signifie qu'un
\"
dans votre heredoc finit juste"
dans votre chaîne. Observer:Vous voulez obtenir un
\
dans le YAML chaîne de sorte que vous aurez à y échapper:Vous pouvez également utiliser
%q{...}
de citer votre chaîne afin qu'il se comporte plus comme une simple chaîne de caractères entre guillemets:Je serais probablement construire la structure que vous souhaitez que les objets Ruby et puis
to_yaml
pour obtenir de la chaîne, moins citant absurde de s'inquiéter de cette façon.OriginalL'auteur mu is too short