2009-07-13 8 views
0

j'ai remarqué mes déclarations app Rails en place des guillemets doubles et certains traits, elle renvoie un point d'interrogation character--mysql problème d'encodage de caractère spécial

Est-il possible de mettre à jour la table et les remplacer par d'origine personnages?

Merci!

Amie

+0

char encodage? UTF-8? –

+0

Oui .. L'en-tête de contenu http spécifie UTF-8. Je me demande s'il existe un moyen de le contourner. Cet article (http://www.validome.org/lang/en/errors/HTML-CHARSET) indique que l'en-tête http a une priorité plus élevée. – Grnbeagle

Répondre

0
update [table_name] set [field_name] = 
replace([field_name],'[string_to_find]','[string_to_replace]'); 

devrait faire l'affaire. Toujours exécuter d'abord contre une base de données de test jusqu'à ce que vous sachiez qu'il ne va rien casser.

Utilisez cette déclaration à vos risques et périls.

+0

Merci pour la suggestion. Un problème avec find et replace est que je ne suis pas sûr de la chaîne à trouver. De la console mysql, ils apparaissent tous comme "?" (y compris les caractères spéciaux et les caractères de point d'interrogation légitimes) J'espérais qu'il y ait un réglage d'encodage que je peux modifier. Toute suggestion est appréciée. – Grnbeagle

1

Ce seront "citations intelligentes" et em- ou en-tirets (“ ” ‘ ’ — –). Les applications Microsoft ont tendance à utiliser celles qui remplacent leurs équivalents ASCII, le guillemet, l'apostrophe et le trait d'union. Ils enregistrent également le texte en tant que Windows-1252, une extension Microsoft du codage de caractères ISO-8859-1 qui inclut des mappages pour ces caractères de fantaisie à la place des caractères de contrôle (certes inutiles) dans la plage 128..159. Donc le problème immédiat est que vous décodez le texte comme ISO-8859-1 ou UTF-8 ou même ASCII (ou laissez le système par défaut à l'un de ces encodages), quand vous devriez utiliser windows-1252 . Pour plus d'informations sur le problème réel, google "démoronizer" ou "ASCII Dammit".

+0

Merci pour info. Comme vous avez suggéré j'ai cherché plus d'informations sur l'encodage de Windows-1252 .. Il semble que l'en-tête de réponse http (qui est spécifié UTF-8) a priorité sur méta charset, donc je ne pouvais pas changer l'encodage ad-hoc. Ceci est une information utile sur le sujet: http://www.cs.tut.fi/~jkorpela/www/windows-chars.html – Grnbeagle

1

Ces points d'interrogation indiquent un octet non valide pour le codage de l'environnement, le résultat est affiché dans.

Ces jours-ci la plupart environnements seront utf-8.

Si votre exécution de l'application de la console mysql, exécutez la commande suivante lorsque vous connectez à dire au serveur MySQL pour retourner tous les résultats pour la connexion en cours en utf-8:

SET NAMES utf8; 

En rails, Vous pouvez exécuter cette commande lorsque ActiveRecord ouvre une connexion db en ajoutant "encoding: utf8" à votre fichier database.yml. Vous devez également vous assurer que votre serveur Web (apahce/nginx/etc) envoie l'en-tête HTTP utf-8 et que vos fichiers HTML ont une méta-étiquette Content-Type.

Il est possible que vous ayez des octets corrompus stockés dans votre base de données et cela n'aidera pas. Si c'est le cas, vous êtes dans un monde de plaisir en essayant de le nettoyer :)

+0

Avait le même problème ...l'ajout de l'encodage: utf8 à database.yml fait apparaître correctement les caractères . Merci, j'avais oublié ça :) – foz

Questions connexes