Caractères étranges dans le texte de base de données: Ã, Ã, ¢, â' €,
Je ne suis pas certain lors de cette première s'est produite.
J'ai une nouvelle baisse-expédition d'affiliation site web, et de recevoir une copie exportée du catalogue de produits du grossiste. Je format et l'importer dans Prestashop 1.4.4.
Le front-end du site web contient des combinaisons de caractères étranges à l'intérieur du produit texte: Ã, Ã, ¢, â", etc. Ils apparaissent à la place des caractères communs comme , - : etc.
Ces caractères sont présents dans environ 40% des tables de base de données, et pas seulement produit des tableaux spécifiques comme ps_product_lang.
Un autre site thread dit ce même problème se produit lorsque la base de données de la chaîne de connexion utilise un mauvais type de codage des caractères.
Dans /config/configuration.inc, il n'y a pas de codage de caractères chaîne de caractères mentionnés, juste le Moteur MySQL, qui est fixé à InnoDB, qui correspond à ce que je vois dans PHPMyAdmin.
J'ai exporté ps_product_lang, remplacé toutes les occurrences de ces personnages avec des caractères corrects, enregistré le fichier CSV au format UTF-8, et réimportés eux à l'aide de PHPMyAdmin, en précisant l'UTF-8 comme la langue.
Cependant, après avoir fait une nouvelle recherche dans PHPMyAdmin, j'ai maintenant environ 10 fois plus de cas de ces mauvais caractères dans ps_product_lang que j'ai commencé.
Si le problème est aussi simple que la spécification de la langue correcte de l'attribut dans la base de données de la chaîne de connexion, où/comment puis-je régler cela, et quoi?
Incidemment, j'ai essayé de lancer cette commande dans PHPMyAdmin mentionné dans ce fil, mais le problème demeure:
SET NAMES utf8
Mise à JOUR: PHPMyAdmin dit:
MySQL charset: UTF-8 Unicode (utf8)
C'est le même jeu de caractères que j'ai utilisé dans le dernier fichier d'importation, qui a causé plus de caractère corruptions. UTF-8 a été spécifié que le jeu de caractères du fichier d'importation pendant le processus d'importation.
UPDATE2
Voici un exemple:
les gens sont vraiment vivant untetheredÃƒÆ Ã, ¢Ã¢ââ, Å¡Ã'ÂÃÂââ, â
Ã'ï† l'achat et la location de films en ligne, le téléchargement de logiciels et
le partage et le stockage des fichiers sur le web.
UPDATE3
J'ai couru une commande SQL dans PHPMyAdmin pour afficher les jeux de caractères:
- character_set_client utf8
- character_set_connection utf8
- character_set_database latin1
- character_set_filesystem binaire
- character_set_results utf8
- character_set_server latin1
- character_set_system utf8
Alors, peut-être de ma base de données doit être converti (ou supprimé et recréé) de l'UTF-8. Cela pourrait-il poser un problème si le serveur MySQL est latin1?
Pouvez MySQL gérer la traduction de la fourniture du contenu comme de l'utf-8 mais le stocker comme latin1? Je ne pense pas qu'il peut, comme de l'utf-8 est un sur-ensemble de latin1. Mon hébergement web de support n'a pas répondu dans les 48 heures. Peut-être trop dur pour eux.
- Exemples ajouté ci-dessus.
- Je ne connais pas beaucoup de prestashop, mais il semble qu'il ne fait pas un bon encodage. De toute façon je vois d'autres personnes ont le même problème: prestashop.com/forums/topic/...
- ce n'est pas seulement une FE problème? phpMyAdmin configuré pour afficher des trucs dans le mauvais encodage et le client n'est pas configuré pour utiliser UTF-8? faut être dans une balise meta.
- La base de données et le serveur est latin1 alors que PHPMyAdmin et le CSV est UTF8. (Voir Update3 ci-dessus)
- Vous n'avez pas besoin de tout réinitialiser la base de données pour faire un essai. Juste obtenir un "sale", en ligne à partir de votre fichier CSV, faire une convertion du format utf-8 pour latin1 et insérer la ligne dans la base de données. Si le retour à la ligne est droite, le problème a été résolu.
- si un seul en face d'un problème avec wordpress site alors s'il vous plaît supprimer ces lignes de wp-config.php fichier define('DB_CHARSET', 'utf8'); define('DB_COLLATE', 'utf8_unicode_ci');
Vous devez vous connecter pour publier un commentaire.
Si le jeu de caractères des tables est la même que celle du contenu essayez d'utiliser
mysql_set_charset('UTF8', $link_identifier)
. Notez que MySQL utiliseUTF8
pour spécifier l'encodage UTF-8 au lieu deUTF-8
qui est la plus courante.Vérifier mon autre réponse sur une question similaire, trop.
C'est sûrement un problème d'encodage. Vous avez un codage différent dans votre base de données et dans votre site web et de ce fait est la cause du problème. Aussi, si vous avez exécuté cette commande, vous devez changer les enregistrements qui sont déjà dans vos tables de convertir les caractères en UTF-8.
Mise à jour: en Fonction de votre dernier commentaire, le cœur du problème est que vous avez une base de données et une source de données (le fichier CSV) qui utilisent un codage différent. Donc vous pouvez convertir votre base de données en UTF-8 ou, au moins, quand vous obtenez les données qui sont dans le CSV, vous devez les convertir en UTF-8 pour latin1.
Vous pouvez faire la conversion suite de cet article:
Ce qui semble être un encodage UTF-8 problème qui peut avoir été causé par un double-UTF8-encodage de la base de données de contenu du fichier.
Cette situation pourrait se produire en raison de facteurs tels que le jeu de caractères qui a été ou n'a pas été sélectionné (par exemple lors d'une sauvegarde de base de données fichier a été créé) et le format de fichier et l'encodage de fichier de base de données a été enregistré avec.
J'ai vu ces étranges caractères UTF-8 dans le scénario suivant (la description ne peut pas être tout à fait exact que je n'ai plus accès à la base de données en question):
À la recherche dans le contenu du fichier:
Donc, le problème est que les "faux" (UTF8 codé deux fois) utf-8 doit être convertie en "corriger" utf-8 (seulement UTF8 codé une fois).
D'essayer de corriger cela en PHP s'avère être un peu difficile:
utf8_decode() n'est pas en mesure de traiter les caractères.
iconv() échoue avec "Avis: iconv(): Détecté un caractère illégal dans la chaîne d'entrée".
Un autre fine et des solutions possibles échoue silencieusement trop dans ce scénario
mb_convert_encoding() en silence: #
D'essayer de corriger l'encodage dans MySQL par la conversion de la base de données MySQL characterset et de classement de l'UTF-8 fut en vain:
Je vois un couple de façons de résoudre ce problème.
La première est de faire une sauvegarde avec le bon encodage (le codage doit correspondre à la réelle base de données et la table d'encodage). Vous pouvez vérifier l'encodage en ouvrant simplement la résultante SQL fichier dans un éditeur de texte.
L'autre est de remplacer double-UTF8-caractères codés avec un seul UTF8 caractères encodés. Cela peut être fait manuellement dans un éditeur de texte. Pour l'aider dans ce processus, vous pouvez choisir manuellement des caractères incorrects de Essayez L'Encodage UTF-8 de Débogage Graphique (il peut être une question de remplacement de 5 à 10 erreurs).
Enfin, un script peut aider dans le processus:
Appliquer ces deux choses.
Vous devez définir le jeu de caractères de votre base de données pour être
utf8
.Vous devez appeler la
mysql_set_charset('utf8')
dans le fichier où vous avez fait la connexion avec la base de données et à droite après la sélection de la base de données commemysql_select_db
utiliser lemysql_set_charset
. Qui va vous permettre d'ajouter et de récupérer les données correctement quelle que soit la langue.L'erreur obtient habituellement introduites pendant la création de CSV. Essayez d'utiliser Linux pour l'enregistrement au format CSV comme un TextCSV. Libre Office sous Ubuntu peut imposer l'encodage UTF-8, qui a travaillé pour moi.
J'ai perdu beaucoup de temps à essayer ce sur Mac OS. Linux est la clé. Je l'ai testé sur Ubuntu.
Bonne Chance
J'ai rencontré aujourd'hui tout à fait un problème similaire : mysqldump sous-évaluées mon utf-8 de la base de l'encodage utf-8 caractères diacritiques comme deux caractères latin1, bien que le fichier lui-même est régulièrement utf8.
Par exemple : "é" a été codée comme deux caractères "é". Ces deux caractères correspondent à l'utf8 deux octets codage de la lettre, mais il doit être interprétée comme un caractère unique.
Pour résoudre le problème et importer la base de données sur un autre serveur, j'ai dû convertir le fichier en utilisant le ftfy (acronyme de "Corrections de Texte Pour Vous). (https://github.com/LuminosoInsight/python-ftfy) bibliothèque python. La bibliothèque est exactement ce que j'attends : transformer mal encodé en utf-8 pour correctement encodé en utf-8.
Par exemple : Ce latin1 combinaison "é" est transformé en un "é".
ftfy est livré avec un script de ligne de commande, mais il transforme le fichier de sorte qu'il ne peut pas être importé dans mysql.
J'ai écrit un python3 script pour faire le tour :