Intermédiaire 8 min de lecture 25 janvier 2025

Mac Roman : encodage, compatibilité et problèmes courants

Accents illisibles, points d’interrogation losanges, apostrophes tordues… Si vos textes viennent d’anciens environnements Mac, il est probable que l’encodage Mac Roman s’en mêle. Comprendre où il apparaît, comment le reconnaître et le convertir proprement vers UTF‑8 vous évite des CSV corrompus, des API incompréhensibles et des tests qui échouent sans raison.

Qu'est-ce que Mac Roman ?

C’est un encodage monooctet historique des Macintosh classiques (1984 → Mac OS 9). Il conserve ASCII sur 0x00–0x7F et définit des glyphes Apple sur 0x80–0xFF.

Points essentiels à garder en tête :

1 Base ASCII et extension Apple

0x00–0x7F = ASCII identique, 0x80–0xFF = répertoire spécifique Apple.

0x00–0x7F: ASCII • 0x80–0xFF: accents, ponctuation typographique, symboles Apple

2 Différences avec Windows‑1252 et ISO‑8859‑1

Les mêmes octets ne produisent pas les mêmes glyphes selon la page de codes.

Plage 0x80–0x9F: imprimables en Mac Roman, contrôles en ISO‑8859‑1 • Mappages ≠ de Windows‑1252

3 Caractères typiques en Mac Roman

Souvent à l’origine de l’affichage “cassé” après un mauvais décodage :

Guillemets/apostrophes courbes ‘ ’ “ ”
Ellipsis …, tirets – —, fractions ½ ¼
Accents latins étendus (é, à, ñ, ü, œ)
Logo Apple (U+F8FF, zone d’usage privé) dans certains contenus

4 Particularités techniques

Points d’attention lors des conversions :

Aucun BOM • Encodage 8 bits (pas d’Unicode natif)
Ambiguïtés fréquentes avec Windows‑1252
Conversion recommandée vers UTF‑8 pour le web et les API

Problèmes classiques

Copiers-collers depuis d’anciens documents Mac

Injecte des octets Mac Roman dans du texte attendu en UTF‑8 → mojibake et caractères “�”.

Tests unitaires qui échouent

Comparaison de chaînes fausse si l’une est décodée en UTF‑8 et l’autre restée en Mac Roman.

Trim() ou strip() inefficace

Un texte mal décodé reste une suite d’octets 8 bits, les fonctions Unicode n’agissent pas comme prévu.

Regex \s ou \w incomplètes

Si la chaîne n’est pas d’abord décodée en UTF‑8, les classes Unicode ne couvrent pas la réalité du contenu.

Exemple de problème courant :

# Même mot, encodages différents
string1 = "Café" # UTF‑8
string2 = "Caf\x8E" # Mac Roman (é en 0x8E)
assert string1 == string2 # ❌ Échec

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un diff git montre des changements massifs alors que seuls les octets d’encodage varient
!
Des CSV affichent “�” à la place des accents sur un système mais pas sur un autre
!
Une API renvoie du texte lisible mais votre application affiche des suites bizarres
!
Votre éditeur indique “macintosh” ou “Western (Mac OS Roman)” dans la barre d’état
!
Des copiers-collers depuis d’anciens PDF/RTF produisent des caractères incohérents

Comment les détecter

Solution recommandée : Clean ASCII

Clean ASCII repère rapidement les octets hors ASCII, les motifs typiques de Mac Roman et aide à convertir vos contenus en UTF‑8. Vous visualisez immédiatement les positions problématiques et les substitutions proposées.

✅ Détection automatique

Octets 0x80–0xFF, ponctuation typographique, symboles non ASCII

📊 Analyse complète

Positions, catégories, suggestions de conversion (iconv/mbstring)

🧹 Nettoyage automatique

Conversion fiable vers UTF‑8 et translittération optionnelle

💾 Export propre

Téléchargement du texte normalisé prêt pour le web

Autres méthodes de détection

Affichage dans l'éditeur

Ouvrez/Re-encodez avec l’encodage indiqué (“macintosh”, “Western (Mac OS Roman)”)
Forcer “Reopen with Encoding” (VS Code) ou “File Encoding” (JetBrains)

En ligne de commande (Unix)

# Repérer des octets > 0x7F (candidats Mac Roman)
grep -P "[^\x09\x0A\x0D\x20-\x7E]" fichier.txt
# Identifier l’encodage supposé
file -I fichier.txt && uchardet fichier.txt || enca fichier.txt
# Convertir Mac Roman → UTF‑8
iconv -f MACROMAN -t UTF-8 fichier.txt > sortie.txt
# Inspecter les octets
hexdump -C fichier.txt

En code

JavaScript

new TextDecoder('macintosh').decode(Uint8Array.from(bytes))

Python

raw_bytes.decode('mac_roman') # → str UTF‑8 interne

Excel / Google Sheets

CODE(MID(cellule;position;1)) # Inspecter les points de code visibles

Nettoyer et prévenir

🚀 Solution rapide avec Clean ASCII

Avant d’écrire des scripts, testez Clean ASCII pour détecter les octets Mac Roman et produire un texte UTF‑8 directement utilisable.

Détection automatique
Nettoyage/Conversion UTF‑8
Export immédiat

Méthodes techniques avancées

🔧 Normaliser

Convertissez systématiquement Mac Roman → UTF‑8 (iconv, recode, mb_convert_encoding)
Déclarez l’encodage: Content‑Type HTTP, meta charset, entêtes CSV
Uniformisez fins de ligne (dos2unix, gitattributes) pour éviter les surprises

🧹 Filtrer

Translittérez les guillemets/tirets typographiques vers ASCII si nécessaire
Remplacez les symboles non mappables (ex. logo Apple) par une alternative textuelle
Bloquez les caractères hors jeu attendu si vos pipelines imposent ASCII/UTF‑8 strict

⚙️ Automatiser

Hooks pre-commit qui refusent les fichiers non UTF‑8 (file -I, uchardet)
Validation d’encodage à l’entrée des formulaires, import CSV/ETL
Vérification de l’encodage sur la CI et normalisation automatique

Checklist rapide

Stockage et transport en UTF‑8 sans BOM
Entêtes HTTP/meta/CSV avec charset explicite
Éditeur configuré pour afficher l’encodage et convertir si besoin
Fonctions de conversion (iconv/mbstring) intégrées à vos libs
Tests vérifiant l’absence de Mac Roman dans les sources et fixtures
Documentation interne sur les encodages attendus et conversions

Conclusion

Mac Roman fait encore surface dans des fichiers hérités et certains flux. En le détectant rapidement et en convertissant systématiquement vers UTF‑8, vous rendez votre stack plus fiable et vos échanges interopérables.

Clarifiez l’encodage dès la source, automatisez les conversions et supprimez la dette liée aux pages de codes historiques.

Convertissez vos textes Mac Roman en UTF‑8

Utilisez notre outil pour détecter les octets Mac Roman et normaliser vos contenus en quelques secondes.

Analyser mon texte