erreur suite migration site sur jeux de caractères

Après une migration et changement de squelette, je n’ai pas vu tout de suite qu’il y avait eu un problème de jeux de caractères… Tout est bien configuré en utf8, et j’ai pu corriger en exportant/important dans la base pour les caractères spéciaux, guillemets, ç…

Mais il reste des bouts de textes en arabe ou cyrillique… et je me retrouve avec des trucs du genre

cette affiche due au graphiste Emile Muneim (أميل منعم) et un nouveau slogan : "Change avec le rouge !" (غيّر بالأحمر)

Heureusement, dans cas, l’article étant une reprise, j’ai la source avec le texte en arabe… mais j’ai sans doute une centaine d’articles en langues donc gros boulot et parfois sans être sur de retrouver le source…

cette affiche due au graphiste Emile Muneim (أميل منعم) et un nouveau slogan : « Change avec le rouge ! » (غيّر بالأحمر),

Comment retrouver le codage utilisé et le retranscrire correctement…?

merci de tout conseil…

Je doute que ce soit tout passé par les bons niveaux d’utf8.
En effet il y a une grande différence au niveau de mysql entre utf8_general_ci, utf8mb3_general_ci et utf8_general_ci (sans parler des versions en _unicode_ci)
(et l’utilisation de caractères arabes entre peut-être encore dans une autre catégorie)
cf. MySQL :: MySQL 8.0 Reference Manual :: 10.10.1 Unicode Character Sets

Peut-être que mon petit retour d’expérience peut t’aider :
j’avais une base d’origine mal encodée : c’était du latin1 encapsulée dans le l’utf8_general_ci (résultat d’une vieille installation spip2 mal migrée en spip3).
Du coup la migration vers une installation propre cassait tous les accents.

J’ai recréé la base pour que toutes les tables soient en utf8mb4_general_ci.
Pour cela j’ai exporté la structure des tables de la base d’origine et modifié la requête SQL pour que tous le encodages soient bons.
Puis j’ai exécuté la requête corrigée sur une nouvelle base de données.

J’ai vérifié que l’encodage par défaut dans my.cnf est bon dans /etc/mysql/mariadb.conf.d/50-server.cnf:

character-set-server  = utf8mb4
collation-server      = utf8mb4_general_ci

(je suis en mariadb 10.6.7)

Ensuite j’ai exporté les données initiales avec la commande
mysqldump -p mabase --set-charset --default-character-set=latin1 --no-create-db --no-create-info > donnees.sql

Un export sans préciser de charset cassait tous les accents car le contenu était mal interprété.

J’ai vérifié dans le fichier sql que les accents étaient bons et j’ai modifié début du fichier pour qu’il contienne
SET NAMES utf8mb4

L’import s’est fait classiquement avec
mysql -p nouvellebase < donnees.sql

Ensuite j’ai fais la mise à jour vers SPIP4.0 sans problème.

Conclusion : il faut à tout moment vérifier les données et se préparer à les héberger proprement. Si l’une des étapes ne fonctionne pas, c’est qu’à ce moment l’encodage ou l’interprétation n’était pas bon.