# Encodage UTF-8 et noms de produits accentués : le bug d’import CSV qui tronque les caractères

> Un fichier CSV fournisseur mal déclaré en Latin-1 casse silencieusement les caractères accentués à l'import WooCommerce. Voici pourquoi ce bug se produit et comment le repérer avant publication.

- Auteur : WordPress Développement
- Publié le : 2021-09-09
- Mis à jour le : 2021-09-09
- Catégorie : E-commerce
- URL : https://www.wpmoderne.fr/ecommerce/encodage-utf8-noms-produits-accentues-bug-import-csv-tronque/

## L’essentiel

- Un fichier CSV n'embarque jamais son encodage, il faut le déduire ou le déclarer
- ISO-8859-1 et UTF-8 codent les caractères accentués sur des octets différents
- mb_detect_encoding et iconv permettent de convertir un fichier avant l'import

« Caf retir en magasin » à la place de « Café à retirer en magasin » : ce genre de titre de produit tronqué après un import CSV fournisseur signale presque toujours le même problème, un fichier encodé en Latin-1 ou en Windows-1252 traité comme s'il était en UTF-8, ou l'inverse. Le symptôme est visible immédiatement dans le tableau de bord WooCommerce après l'import, mais sa cause reste souvent mal comprise par qui découvre le problème pour la première fois.

Ce billet explique la mécanique de cet incident d'encodage, comment le diagnostiquer, et comment corriger un fichier CSV avant de relancer l'import, sans entrer dans le mapping des colonnes lui-même.

## Pourquoi un fichier texte n'a pas d'encodage intrinsèque

Un fichier CSV est une suite d'octets. Rien dans ce fichier n'indique explicitement, à moins d'un marqueur d'ordre des octets (BOM) en tout début de fichier, quel jeu de caractères a servi à produire ces octets. Le caractère « é » s'encode sur deux octets distincts en UTF-8, mais sur un seul octet différent en ISO-8859-1 (Latin-1) ou en Windows-1252. Un logiciel qui lit ce fichier doit deviner ou se voir indiquer l'encodage d'origine ; s'il se trompe, chaque caractère accentué est mal interprété, produisant des caractères aberrants ou, pire, une troncature silencieuse de la chaîne dès le premier octet non reconnu comme valide.

## Où se situe le point de rupture dans l'import WooCommerce

> L'essentiel à retenir : Un fichier CSV n'embarque jamais son encodage, il faut le déduire ou le déclarer ; ISO-8859-1 et UTF-8 codent les caractères accentués sur des octets différents ; mb_detect_encoding et iconv permettent de convertir un fichier avant l'import

L'import CSV natif de WooCommerce, via WooCommerce > Produits > Importer, attend un fichier encodé en UTF-8. Un fichier fournisseur exporté depuis un tableur configuré en Windows-1252, encodage courant sur des exports Excel plus anciens, produira des noms de produits corrompus dès la lecture, avant même que le mapping des colonnes n'entre en jeu.

## Diagnostiquer l'encodage d'un fichier avant import

La fonction PHP `mb_detect_encoding()` permet une première estimation, à utiliser comme indice plutôt que comme certitude absolue, car la détection automatique reste probabiliste sur des textes courts :

```
$contenu  = file_get_contents( 'catalogue-fournisseur.csv' );
$encodage = mb_detect_encoding( $contenu, [ 'UTF-8', 'ISO-8859-1', 'Windows-1252' ], true );

echo $encodage; // par exemple : ISO-8859-1
```

En ligne de commande, l'outil `file -i` sur un système Linux donne également une estimation rapide de l'encodage détecté pour un fichier donné, utile avant même d'écrire une ligne de PHP.

## Convertir le fichier avant l'import

Une fois l'encodage source identifié, la conversion vers UTF-8 se fait avec `iconv()` :

```
$contenu_utf8 = iconv( 'Windows-1252', 'UTF-8//TRANSLIT', $contenu );
file_put_contents( 'catalogue-fournisseur-utf8.csv', $contenu_utf8 );
```

L'option `//TRANSLIT` demande à `iconv()` de remplacer par une approximation les caractères qui n'ont pas d'équivalent direct dans l'encodage cible, plutôt que d'échouer sur eux. En ligne de commande, l'utilitaire `iconv` réalise la même conversion sans écrire de script PHP :

```
iconv -f WINDOWS-1252 -t UTF-8 catalogue-fournisseur.csv > catalogue-fournisseur-utf8.csv
```

## Vérifier avant de relancer l'import

- Ouvrir le fichier converti dans un éditeur de texte affichant explicitement l'encodage
- Rechercher un échantillon de noms de produits connus pour contenir des accents
- Relancer l'import sur un environnement de recette avant de le rejouer en production

> Sur chaque nouvel import fournisseur, la première vérification consiste à ouvrir le fichier dans un éditeur qui affiche l'encodage détecté en bas de fenêtre, avant même de regarder les colonnes : cela évite de découvrir le problème après coup sur des centaines de fiches déjà publiées.

## Le cas particulier du BOM UTF-8

Un fichier déjà en UTF-8 peut lui aussi poser problème s'il commence par une marque d'ordre des octets, trois octets invisibles ajoutés par certains tableurs en tête de fichier. Cette marque, si elle n'est pas retirée, se retrouve parfois collée au tout premier nom de produit du fichier, produisant un caractère parasite invisible en début de champ. Un simple `ltrim()` ciblé sur cette séquence d'octets avant traitement règle ce cas particulier, distinct du problème d'encodage général évoqué plus haut.

## En résumé

Un import CSV qui tronque des caractères accentués n'est presque jamais un problème de WooCommerce lui-même, mais un décalage d'encodage en amont, dans le fichier reçu du fournisseur. Vérifier systématiquement l'encodage avant l'import, et convertir en UTF-8 si nécessaire, évite un nettoyage manuel fastidieux de titres de produits déjà publiés.
