Intermédiaire 8 min de lecture 25 janvier 2025

Remove BOM: supprimer le Byte Order Mark de vos fichiers

Tout fonctionne… jusqu’au moment où un fichier refuse de se parser, un header PHP est « déjà envoyé » ou un CSV affiche  dans la première cellule. Dans bien des cas, la cause est le BOM: un marqueur invisible au début du fichier. Remove BOM et ces erreurs disparaissent. Voici comment le repérer, pourquoi il gêne et les meilleures façons de le retirer sans casser vos données.

Qu’est-ce que le BOM ?

Le BOM (Byte Order Mark) est une séquence d’octets au début d’un fichier texte indiquant l’encodage et, selon le format, l’ordre des octets. Il est invisible mais présent. Remove BOM évite de nombreux effets de bord.

Principales variantes de BOM que vous pouvez rencontrer :

1 BOM en UTF‑8

Le plus courant; beaucoup d’outils n’en veulent pas.

EF BB BF (UTF‑8 BOM)

2 BOM en UTF‑16 (LE/BE)

Indique l’ordre des octets; peut brouiller les parsers non prévus.

FE FF (BE), FF FE (LE)

3 BOM en UTF‑32

Plus rare mais catastrophique pour des outils texte classiques.

00 00 FE FF (BE)
FF FE 00 00 (LE)

4 Pièges techniques autour du BOM

Les écueils les plus fréquents à maîtriser avant de remove BOM :

U+FEFF utilisé comme caractère et non comme BOM
Éditeurs configurés sur “UTF‑8 with BOM” par défaut
Scripts avec shebang précédé du BOM → exécution cassée
HTTP “headers already sent” en PHP à cause d’un BOM

Problèmes classiques

PHP: headers already sent

Un BOM en début de fichier émet des octets avant les en-têtes HTTP.

JSON/CSV avec caractères bizarres

La première clé devient id ou un parser refuse la lecture.

Shebang ignoré

Le BOM précède #!/usr/bin/env … et le système n’exécute pas le bon interpréteur.

Hash/diff imprévisibles

Un BOM en tête fausse les empreintes et ajoute un delta inutile dans git.

Exemple de problème courant :

# Fichier JSON avec BOM en tête
raw = "\ufeff{ \"id\": 1 }"
JSON.parse(raw) # ❌ Erreur: caractère inattendu à la position 0
# Remove BOM → OK

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Le diff git montre un ajout en tout début de fichier sans modification visible ()
!
PHP affiche “Cannot modify header information — headers already sent”
!
Un JSON renvoie “Unexpected token” dès le premier caractère
!
Le shebang ne s’exécute pas sous Linux/macOS pour un script Node/Python
!
Un CSV montre  devant la première entête de colonne

Comment détecter et remove BOM

Solution recommandée : Clean ASCII

Clean ASCII détecte immédiatement la présence d’un BOM et indique sa position. L’outil permet de remove BOM en un clic et d’exporter le texte propre pour éviter les erreurs ultérieures.

✅ Détection automatique

UTF‑8/UTF‑16/UTF‑32 BOM, U+FEFF, octets parasites en tête

📊 Analyse complète

Séquence exacte, position 0, encodage suspect, recommandations

🧹 Nettoyage automatique

Remove BOM sans toucher au reste du contenu

💾 Export propre

Téléchargement immédiat en UTF‑8 sans BOM

Autres méthodes de détection

Affichage dans l'éditeur

Vérifiez la barre de statut: “UTF‑8 with BOM” vs “UTF‑8” et convertissez sans BOM
Installez une extension “Strip/Remove BOM” et activez l’enregistrement sans BOM

En ligne de commande (Unix)

# Détecter un BOM UTF-8 en début de fichier
grep -P "^\xEF\xBB\xBF" -n fichier.txt
# Supprimer le BOM avec sed (in-place)
sed -i '1s/^\xEF\xBB\xBF//' fichier.txt
# Repérer UTF-16/UTF-32 (BOM différents)
file -I fichier.txt && hexdump -n 4 -C fichier.txt
# Voir la séquence d’octets exacte
head -c 4 fichier.txt | hexdump -C

En code

JavaScript

const clean = s.replace(/^\uFEFF/, "");

Python

open(path, encoding="utf-8-sig").read()

Excel / Google Sheets

SUBSTITUTE(A1;CAR(65279);"")

Nettoyer et prévenir

🚀 Remove BOM en quelques secondes avec Clean ASCII

Avant toute manipulation complexe, passez votre texte dans Clean ASCII pour remove BOM immédiatement et vérifier le reste du contenu.

Détection instantanée du BOM
Nettoyage ciblé sans pertes
Export UTF‑8 sans BOM

Méthodes techniques avancées

🔧 Normaliser

Enregistrez vos fichiers en UTF‑8 sans BOM (.editorconfig: charset = utf-8)
Supprimez les BOM inutiles dans les dépôts existants
Uniformisez les fins de ligne (gitattributes, dos2unix) pour des diffs stables

🧹 Filtrer

Implémentez strip_bom() en lecture pour retirer \uFEFF au début
Désactivez l’écriture “UTF‑8 with BOM” dans vos éditeurs et exports
Bloquez l’ingestion de fichiers BOM‑és dans vos pipelines

⚙️ Automatiser

Hooks pre-commit: refuser tout fichier qui commence par EF BB BF
Tests sur les inputs: remove BOM avant parsing JSON/CSV/YAML
CI: linter d’encodage et vérification “UTF‑8 sans BOM”

Checklist rapide

Fichiers en UTF‑8 sans BOM
.editorconfig et éditeurs configurés pour ne pas ajouter de BOM
Affichage de l’encodage dans la barre de statut de l’éditeur
Fonction strip_bom() dans vos utilitaires d’E/S texte
Tests empêchant les BOM dans code, configs et manifestes
Documentation interne sur remove BOM et encodages

Conclusion

Le BOM est discret mais redoutable. En le détectant et en appliquant remove BOM au bon moment, vous évitez des heures de recherche d’erreurs.

Standardisez vos encodages, surveillez l’apparition du BOM et nettoyez-le automatiquement: vos builds, parsers et déploiements resteront fiables.

Remove BOM maintenant

Utilisez notre outil pour détecter et supprimer le BOM dans vos textes et fichiers avant qu’il ne casse vos traitements.

Analyser et remove BOM