Les pages de codes Windows sont des ensembles de caractères ou pages de codes (appelés codages de caractères dans d'autres systèmes d'exploitation) utilisés dans Microsoft Windows dans les années 1980 et 1990. Les pages de codes Windows ont été progressivement remplacées lorsque Unicode a été implémenté dans Windows , bien qu'elles soient toujours prises en charge à la fois dans Windows et sur d'autres plates-formes, et s'appliquent toujours lorsque des raccourcis de code Alt sont utilisés.
Les versions actuelles de Windows prennent en charge Unicode . Les nouvelles applications Windows doivent utiliser Unicode (UTF-8) et non les codages de caractères 8 bits.
Il existe deux groupes de pages de codes système dans les systèmes Windows : les pages de codes OEM et les pages de codes natives Windows (« ANSI »). (ANSI est l' American National Standards Institute .) Les pages de codes de ces deux groupes sont des pages de codes ASCII étendues . Des pages de codes supplémentaires sont prises en charge par les routines de conversion Windows standard, mais ne sont utilisées comme aucun type de page de codes système.
Page de codes ANSI
Les pages de codes ANSI (officiellement appelées « pages de codes Windows » après que Microsoft a accepté que le premier terme soit une appellation erronée ) sont utilisées pour les applications natives non Unicode (par exemple, orientées octets ) utilisant une interface utilisateur graphique sur les systèmes Windows. Le terme « ANSI » est une appellation erronée car ces pages de codes Windows ne sont conformes à aucune norme ANSI (American National Standards Institute) ; la page de codes 1252 était basée sur un premier projet ANSI qui est devenu la norme internationale ISO 8859-1 , qui ajoute 32 codes de contrôle supplémentaires et un espace pour 96 caractères imprimables. Entre autres différences, les pages de codes Windows allouent des caractères imprimables à l'espace de code de contrôle supplémentaire, les rendant au mieux illisibles pour les systèmes d'exploitation conformes aux normes.)
La plupart des pages de codes « ANSI » héritées ont des numéros de page de codes dans le modèle 125x. Cependant, les pages de codes 874 (thaïlandaises) et les pages de codes multi-octets « ANSI » d'Asie de l'Est ( 932 , 936 , 949 , 950 ), qui sont toutes également utilisées comme pages de codes OEM, sont numérotées pour correspondre aux codages IBM, dont aucun n'est identique aux codages Windows (bien que la plupart soient similaires). Bien que la page de codes 1258 soit également utilisée comme page de codes OEM, elle est originale pour Microsoft plutôt qu'une extension d'un codage existant. IBM a attribué ses propres numéros différents aux variantes de Microsoft, ceux-ci sont donnés à titre de référence dans les listes ci-dessous, le cas échéant.
Toutes les pages de codes Windows 125x, ainsi que 874 et 936, sont étiquetées par l'Internet Assigned Numbers Authority (IANA) comme « Windows - numéro », bien que « Windows-936 » soit considéré comme un synonyme de « GBK ». La page de codes Windows 932 est plutôt étiquetée comme « Windows-31J ».
Les pages de codes Windows ANSI, et en particulier la page de codes 1252 , ont été appelées ainsi car elles étaient censées être basées sur des projets soumis ou destinés à l'ANSI. Cependant, l'ANSI et l'ISO n'ont normalisé aucune de ces pages de codes. Au lieu de cela, elles sont soit :
- Sur-ensembles d'ensembles de normes tels que ceux de l'ISO 8859 et des différentes normes nationales (comme Windows-1252 vs. ISO-8859-1 ),
- Modifications majeures de celles-ci (les rendant incompatibles à divers degrés, comme Windows-1250 vs. ISO-8859-2 )
- N'ayant pas de codage parallèle (comme Windows-1257 par rapport à ISO-8859-4 ; ISO-8859-13 a été introduit beaucoup plus tard). De plus, Windows-1251 ne suit ni la norme ISO -8859-5 normalisée par l'ISO ni la norme KOI-8 alors en vigueur .
Microsoft a attribué environ douze caractères typographiques et commerciaux (notamment le symbole de l'euro , €) dans CP1252 aux points de code 0x80–0x9F qui, dans la norme ISO 8859, sont attribués aux codes de contrôle C1 . Ces attributions sont également présentes dans de nombreuses autres pages de codes ANSI/Windows aux mêmes points de code. Windows n'utilisait pas les codes de contrôle C1, donc cette décision n'a eu aucun effet direct sur les utilisateurs de Windows. Cependant, si elles étaient incluses dans un fichier transféré vers une plate-forme conforme aux normes comme Unix ou MacOS, les informations étaient invisibles et potentiellement perturbatrices.
Page de codes OEM
Les pages de codes OEM ( Original Equipment Manufacturer ) sont utilisées par les applications de console Win32 et par le DOS virtuel . Elles peuvent être considérées comme un vestige de DOS et de l' architecture IBM PC d'origine . Une suite distincte de pages de codes a été implémentée non seulement pour des raisons de compatibilité, mais aussi parce que les polices du matériel VGA (et descendant) suggèrent que le codage des caractères de dessin de ligne soit compatible avec la page de codes 437. La plupart des pages de codes OEM partagent de nombreux points de code, en particulier pour les caractères non alphabétiques, avec la seconde moitié (non ASCII) de CP437.
Une page de codes OEM typique, dans sa seconde moitié, ne ressemble pas du tout à une page de codes ANSI/Windows, même grossièrement. Néanmoins, deux pages de codes à largeur fixe sur un seul octet (874 pour le thaï et 1258 pour le vietnamien ) et quatre pages de codes CJK multioctets ( 932 , 936 , 949 , 950 ) sont utilisées à la fois comme pages de codes OEM et ANSI. La page de codes 1258 utilise des signes diacritiques combinés , car le vietnamien nécessite plus de 128 combinaisons de signes diacritiques. Cela contraste avec VISCII , qui remplace certains des codes de contrôle C0 (c'est-à-dire ASCII).
Histoire
Au début, les systèmes informatiques et les langages de programmation système ne faisaient pas de distinction entre caractères et octets : pour les écritures segmentaires utilisées dans la plupart des pays d'Afrique, des Amériques, de l'Asie du Sud et du Sud-Est, du Moyen-Orient et de l'Europe, un caractère n'avait besoin que d'un octet, mais deux octets ou plus sont nécessaires pour les jeux d'idéogrammes utilisés dans le reste du monde. Cela a ensuite entraîné de nombreuses confusions. Les logiciels et systèmes Microsoft antérieurs à la gamme Windows NT en sont des exemples, car ils utilisent les pages de codes OEM et ANSI qui ne font pas la distinction.
Depuis la fin des années 1990, les logiciels et les systèmes ont adopté Unicode comme format de stockage préféré ; cette tendance a été améliorée par l'adoption généralisée du XML qui utilise par défaut UTF-8 mais fournit également un mécanisme d'étiquetage du codage utilisé. interfaces de programme d'application Microsoft actuels utilisent Unicode en interne, mais certaines applications continuent d'utiliser le codage par défaut des « paramètres régionaux » de l'ordinateur lors de la lecture et de l'écriture de données texte dans des fichiers ou sur la sortie standard. Par conséquent, il peut toujours y avoir des fichiers lisibles et intelligibles dans une partie du monde mais inintelligibles dans une autre.
UTF-8, UTF-16
Microsoft a adopté un codage Unicode (d'abord l' UCS-2 désormais obsolète , qui était alors le seul codage d'Unicode), c'est-à-dire UTF-16 pour tous ses systèmes d'exploitation à partir de Windows NT, mais prend également en charge UTF-8 (aka CP_UTF8) depuis Windows 10 version 1803. [ UTF-16 code de manière unique tous les caractères Unicode dans le plan multilingue de base (BMP) en utilisant 16 bits, mais le reste de l'Unicode (par exemple les émojis ) est codé avec un code 32 bits (quatre octets) - tandis que le reste de l'industrie ( systèmes de type Unix et le Web), et maintenant Microsoft a choisi UTF-8 (qui utilise un octet pour le jeu de caractères ASCII 7 bits , deux ou trois octets pour les autres caractères du BMP et quatre octets pour le reste).
Liste
Les pages de codes Windows suivantes existent :
Série Windows 125x
Ces neuf pages de codes sont toutes des codages SBCS ASCII 8 bits étendus et ont été conçues par Microsoft pour être utilisées comme pages de codes ANSI sous Windows. Elles sont communément connues sous leur nom enregistré auprès de l'IANA , mais sont aussi parfois appelées , « cp » pour « code page ». Elles sont toutes utilisées comme pages de codes ANSI ; Windows-1258 est également utilisé comme page de codes OEM. windows-<number>cp<number>
La série Windows-125x comprend neuf pages de codes ANSI et couvre principalement les scripts d' Europe et d'Asie occidentale avec l'ajout du Vietnam . Les codages système pour le thaï et les langues d'Asie de l'Est ont été numérotés pour correspondre aux pages de codes IBM similaires et sont utilisés à la fois comme pages de codes ANSI et OEM ; ils sont abordés dans les sections suivantes.
Pages de codes DOS
Ces pages sont également basées sur le format ASCII. La plupart d'entre elles sont incluses pour être utilisées comme pages de codes OEM ; la page de codes 874 est également utilisée comme page de codes ANSI.
- 437 – IBM PC US, ASCII étendu SBCS 8 bits . Connu sous le nom d'OEM-US, le codage de la police intégrée principale des cartes graphiques VGA.
- 708 – Arabe, ISO 8859-6 étendu (ASMO 708)
- 720 – Arabe, conservant les caractères du dessin de la boîte à leurs emplacements habituels
- 737 – « MS-DOS Greek ». Conserve tous les caractères de dessin de boîte. Plus populaire que 869.
- 775 – « MS-DOS Baltic Rim »
- 850 – « MS-DOS Latin 1 ». Répertoire complet (réorganisé) de la norme ISO 8859-1 .
- 852 – « MS-DOS Latin 2 »
- 855 – « Cyrillique MS-DOS ». Principalement utilisé pour les langues slaves du sud . Comprend le répertoire (réorganisé) de la norme ISO-8859-5 . À ne pas confondre avec cp866.
- 857 – « MS-DOS turc »
- 858 – Europe occidentale avec le symbole de l'euro
- 860 – « MS-DOS Portugais »
- 861 – « MS-DOS islandais »
- 862 – « MS-DOS Hébreu »
- 863 – « MS-DOS Canada français »
- 864 – Arabe
- 865 – « MS-DOS Nordique »
- 866 – « MS-DOS Cyrillic Russian », cp866. Seule page de codes purement OEM (plutôt qu'ANSI ou les deux) incluse comme codage hérité dans la norme de codage WHATWG pour HTML5 .
- 869 – « MS-DOS Greek 2 », IBM869. Répertoire complet (réorganisé) de la norme ISO 8859-7 .
- 874 – Thai , également utilisé comme page de codes ANSI, étend ISO 8859-11 (et donc TIS-620 ) avec quelques caractères supplémentaires de Windows-1252. Correspond à la page de codes IBM 1162 (IBM-874 est similaire mais possède des extensions différentes).
Pages de codes multi-octets d'Asie de l'Est
Ces pages de codes diffèrent souvent des pages de codes IBM du même numéro : les pages de codes 932, 949 et 950 ne correspondent que partiellement aux pages de codes IBM du même numéro, tandis que le numéro 936 a été utilisé par IBM pour un autre codage chinois simplifié qui est désormais obsolète et Windows-951, dans le cadre d'un kludge , n'est pas lié à IBM-951. Les pages de codes IBM équivalentes sont indiquées dans la deuxième colonne. Les pages de codes 932, 936, 949 et 950/951 sont utilisées à la fois comme pages de codes ANSI et OEM sur les paramètres régionaux en question.

Quelques pages de codes multi-octets supplémentaires sont prises en charge pour le décodage ou l'encodage à l'aide des bibliothèques du système d'exploitation, mais ne sont utilisées comme aucun type d'encodage système dans aucun paramètre régional.
Pages de codes EBCDIC
Pages de codes liées à Unicode
Pages de codes de compatibilité Macintosh
Pages de codes ISO 8859
Pages de codes UIT-T
Pages de codes KOI8
Problèmes découlant de l'utilisation des pages de codes
Microsoft recommande fortement d’utiliser Unicode dans les applications modernes, mais de nombreuses applications ou fichiers de données dépendent encore des pages de codes héritées.
- Les programmes doivent savoir quelle page de code utiliser pour afficher correctement le contenu des fichiers (pré-Unicode). Si un programme utilise la mauvaise page de code, il peut afficher le texte sous la forme mojibake .
- La page de codes utilisée peut différer selon les machines, de sorte que les fichiers (pré-Unicode) créés sur une machine peuvent être illisibles sur une autre.
- Les données sont souvent mal étiquetées avec la page de codes, ou pas du tout étiquetées, ce qui rend difficile la détermination de la page de codes correcte pour lire les données.
- Ces pages de codes Microsoft diffèrent à divers degrés de certaines normes et implémentations d'autres fournisseurs. Il ne s'agit pas d'un problème propre à Microsoft , car cela arrive à tous les fournisseurs, mais le manque de cohérence rend l'interopérabilité avec d'autres systèmes peu fiable dans certains cas.
- L'utilisation de pages de codes limite l'ensemble des caractères pouvant être utilisés.
- Les caractères exprimés dans une page de codes non prise en charge peuvent être convertis en points d'interrogation (?) ou autres caractères de remplacement , ou en une version plus simple (comme la suppression des accents d'une lettre). Dans les deux cas, le caractère d'origine peut être perdu.