2009-02-27 6 views
4

Quand je sérialiser un hachage contenant des chaînes UTF8, comme ceci:Ruby on Rails: serialize problème UTF8

poll.variants = {0 => 'тест',1 => '-тест-',2 => 'test # test "тест'} 

à un champ ActiveRecord, le champ résultant contient:

--- 
0: !binary | 
    0YLQtdGB0YI= 

1: !binary | 
    LdGC0LXRgdGCLQ== 

2: !binary | 
    dGVzdCAjIHRlc3QgItGC0LXRgdGC 

Les chaînes de UTF8 se traité comme binaire et codé en base64 pour une raison quelconque. La collation sur le terrain est utf8_general_ci, et je suis un peu déçu.

Existe-t-il un moyen de rendre ActiveRecord: sérialiser le yaml lisible par un humain sur le terrain?

Répondre

5

Est-il possible de faire ActiveRecord : sérialisation YAML lisible par l'homme sur le terrain ?

No. Son base64 codé de façon à coder un texte arbitraire (en tout encodage) au plus bas denonimator commune, qui est alors sûr d'envoyer à travers le fil et/ou un magasin dans datastores qui n'acceptent pas UTF-8 Les données.

+0

Oh, c'est raisonnable. Merci pour l'explication. –

+1

La question est: Pourquoi Rails ne désérialise-t-il pas la chaîne de la base de données en UTF-8? Il renvoie ASCII-8BIT ... – awendt