Qu'est-ce qu'un surrogate pair ?
En UTF‑16, un surrogate pair est un couple d’unités (haut + bas) représentant un point de code au‑delà de U+FFFF. Un seul symbole peut donc occuper deux unités.
Les notions essentielles à connaître :
1 BMP vs plans supplémentaires
Le BMP couvre U+0000 à U+FFFF. Au‑delà (U+10000 à U+10FFFF), UTF‑16 utilise des surrogate pairs.
2 Paires de substitution UTF‑16
Une unité haute (U+D800–DBFF) suivie d’une unité basse (U+DC00–DFFF) représente un point de code unique.
3 Exemples fréquents hors BMP
Les plus rencontrés dans les applications modernes :
4 Marques techniques connexes
Éléments souvent combinés avec des surrogate pairs :
Problèmes classiques
Troncature au milieu d’un surrogate pair
Substr/LEFT() coupe une unité haute ou basse seule → caractère �, JSON invalide, insertion DB refusée.
Longueur incohérente selon les langages
JavaScript str.length compte les unités UTF‑16; Python compte les points de code → validations et limites faussées.
Regex et classes de caractères surprises
Selon le moteur, . ou \w n’englobe pas les points de code astrals, ou casse une paire en deux unités.
Sérialisation/encodage non strict
JSON/XML peuvent rejeter des paires non appariées; des conversions UTF‑16 ↔ UTF‑8 altèrent les données.
Exemple de problème courant :
Symptômes qui doivent vous alerter
🚨 Signaux d'alarme
Comment les détecter
✨ Solution recommandée : Clean ASCII
Clean ASCII identifie les points de code au‑delà du BMP, les paires UTF‑16 non appariées et les séquences problématiques. L’analyse indique les positions, la valeur exacte et propose des corrections sûres.
✅ Détection automatique
Points de code > U+FFFF, paires hautes/basses, séquences invalides
📊 Analyse complète
Code points, offsets, aperçu binaire et UTF‑16
🧹 Nettoyage automatique
Réparation des paires non appariées, conversions sûres vers UTF‑8
💾 Export propre
Texte corrigé, conforme aux API et bases de données
Autres méthodes de détection
Affichage dans l'éditeur
En ligne de commande (Unix)
En code
JavaScript
Python
Excel / Google Sheets
Nettoyer et prévenir
🚀 Solution rapide avec Clean ASCII
Avant d’écrire du code de parsing, utilisez Clean ASCII pour diagnostiquer et corriger immédiatement les surrogate pairs problématiques.
Méthodes techniques avancées
🔧 Normaliser
🧹 Filtrer
sanitize_surrogates() pour refuser/réparer les paires non appariées
⚙️ Automatiser
Checklist rapide
Conclusion
Les surrogate pairs ne sont pas visibles au premier coup d’œil, mais ils impactent les longueurs, les découpes et les encodages.
En détectant les points de code hors BMP, en validant les paires UTF‑16 et en adoptant des API “code point aware”, vous évitez une large part des bugs liés aux emojis et symboles modernes.
Analysez vos textes avec surrogate pairs
Utilisez notre outil pour repérer les points de code hors BMP, réparer les paires non appariées et fiabiliser vos traitements.
Analyser mon texte