Problème de codage de caractères de la base de données MyBB importée

Bonjour, j’ai importé un grand nombre de messages et même des noms d’utilisateurs depuis un forum MyBB, et ils affichent des caractères aléatoires comme ’ et Â.

D’après ce que je comprends des rapports sur un comportement similaire dans WordPress, cela pourrait être un problème d’encodage entre Latin1 et UTF-8 ?

Existe-t-il un moyen simple de les supprimer a posteriori ?

À quels caractères ces symboles correspondent-ils réellement ? Je n’arrive pas à imaginer quels caractères d’origine ils ont pu remplacer.

Par ailleurs, je constate que certains messages importés contiennent beaucoup de MyCode non analysé. Existe-t-il un moyen de l’analyser dans Discourse ?

Oui, c’est mon hypothèse. Je travaille actuellement sur une importation présentant des problèmes similaires. La plupart concernent des éléments tels que les guillemets courbes et les tirets cadratins.

C’est loin d’être simple, mais vous pouvez effectuer un post-traitement qui soit applique un force_encoding, soit tente de remplacer les caractères un par un.

Quelque chose comme

Post.all.each do |post|
  post.raw = post.raw.force_encoding('utf-8').encode("Windows-1252").force_encoding('utf-8')
  post.save!
  post.rebake!
end

Mais je vous recommande de le tester largement sur un site de préproduction avant de l’exécuter sur vos données en production.

Merci, Jay.
Y a-t-il une astuce pour régler le problème à la source — c’est-à-dire réexporter la base de données de l’ancien forum, puis la réimporter sans problèmes de caractères ni de code BB ?

Si vous n’avez pas encore lancé, ce qui signifie que repartir de zéro n’est pas une option, c’est la meilleure façon de procéder.

Le site n’est pas officiellement en ligne, mais quelle est la meilleure façon de gérer les problèmes de caractères et l’analyse du mycode lors de l’exportation depuis MyBB ?

Exporter toutes les données en UTF-8, si possible, résoudra ces problèmes.

Je suis retourné à l’installation initiale de MyBB et j’ai trouvé dans le panneau d’administration/Outils et maintenance/Santé du système un avertissement :

Il est recommandé de ne pas utiliser de codages différents dans votre base de données. Cela peut entraîner des comportements inattendus ou des erreurs MySQL.

Les tables sont listées, et j’ai pu constater que la plupart, mais pas toutes, étaient au format UTF-8. Il semblait que certaines, en particulier celles associées à des plugins, étaient dans un format plus ancien.

En cliquant sur le lien « Tout convertir », une réponse est apparue indiquant que /inc/config.php devait être modifié pour prendre en charge l’UTF-8 complet sur 4 octets :

$config[‘database’][‘encoding’] = ‘utf8mb4’;

Après avoir modifié config.php et réessayé la conversion, tout est maintenant indiqué comme correspondant. Je vais essayer de réimporter vers Discourse et vous tiendrai informé si cela résout les problèmes de caractères.

Je ne suis toujours pas sûr de savoir comment gérer l’analyse MyCode, cependant ?

Vous n’avez inclus aucun exemple ni détail à ce sujet. À ce stade, il serait peut-être préférable de créer un nouveau sujet et de garder celui-ci centré sur le suivi concernant le codage des caractères.

Bonjour, un nouveau sujet avec un exemple se trouve ici