2009-02-04 7 views
2

J'ai une application Rails qui permet aux utilisateurs d'importer des informations de diverses sources à l'aide de flux RSS et autres. Mon encodage par défaut sur la base de données est UTF8 et j'ai reçu beaucoup d'exceptions en ce qui concerne les données non-UTF8 qui arrivent dans le système et qui se bloquent une fois qu'elles ont atteint la base de données.Traitement approprié du contenu non-UTF8 dans mon application Rails

Je dois détecter de manière appropriée les données non-UTF8 en utilisant is_utf8? méthode sur les attributs avant qu'une sauvegarde est faite, mais je n'ai pas trouvé un moyen de le gérer. J'ai vu iconv à convertir mais il semble que cela nécessite de pouvoir déterminer quel type d'encodage je suis en train de convertir.

Existe-t-il un moyen simple d'effectuer une conversion par devinette ou éventuellement de supprimer les caractères non-UTF8, puis de les sauvegarder dans la base de données?

Merci!

Répondre

1

Comment les données non-UTF-8 arrivent-elles dans le système? Assurez-vous que toutes vos pages sont traitées en tant que type de contenu text/html; charset = utf-8 et que les navigateurs soumettent toujours les données UTF-8 à vos formulaires.

(Bien sûr, cela laisse encore des choses comme le courrier et les fichiers téléchargés, mais beaucoup de ces types de contexte spécifique vous donnent souvent un encodage pour continuer.)

1

Iconv est votre ami quand il s'agit de changer de codage. Pour détecter les encodages, un petit bijou est disponible: rchardet Nous l'avons utilisé pour détecter les encodages asiatiques dans le but de bloquer les spams et cela a bien fonctionné.

Questions connexes