Qu'est-ce que le format ANSI?


Réponses:


246

Le codage ANSI est un terme légèrement générique utilisé pour faire référence à la page de codes standard sur un système, généralement Windows. Il est plus correctement appelé Windows-1252 sur les systèmes occidentaux / américains. (Il peut représenter certaines autres pages de codes Windows sur d'autres systèmes.) Il s'agit essentiellement d'une extension du jeu de caractères ASCII en ce qu'il inclut tous les caractères ASCII avec 128 codes de caractères supplémentaires. Cette différence est due au fait que le codage "ANSI" est de 8 bits plutôt que de 7 bits comme ASCII (ASCII est presque toujours codé de nos jours en octets de 8 bits avec le MSB mis à 0). Consultez l'article pour une explication des raisons pour lesquelles ce codage est généralement appelé ANSI.

Le nom "ANSI" est un terme impropre, car il ne correspond à aucune norme ANSI réelle, mais le nom est resté. ANSI n'est pas identique à UTF-8.


42
ANSI n'est pas seulement un "léger" abus de langage, c'est un nom complètement faux. Ce nom implique clairement que tout ce à quoi il fait référence est une norme ANSI, ce qu'il n'est pas; c'est une question de fait en noir et blanc. Cela dit, il est si largement utilisé que nous en sommes coincés.
Nate CK

1
Je connais ANSI comme étant la page de codes 437, pas la page de codes Windows 1252. À l'époque où ANSI faisait référence aux graphiques créés pour les systèmes de babillards électroniques, je peux à peu près garantir que c'est le cas.
lordscarlet

@lordscarlet: ANSI ne les a pas standardisés, mais Windows-1252 est le plus proche que vous obtenez (au moins sur Windows), car c'est un sur-ensemble. Voir en.wikipedia.org/wiki/ANSI_codepage#ANSI pour référence.
Noldorin

4
"ANSI" ne fait clairement référence à aucune norme ANSI, mais c'est un fait que vous pouvez choisir "Encoding: ANSI" par exemple dans le Bloc-notes lorsque vous enregistrez un fichier. Et la vraie question est: "Qu'est-ce que cela signifie"? Cette réponse est de loin la meilleure.
Wernfried Domscheit

1
Dans mon cas, ANSI faisait référence windows-1254.
Ramazan Polat

59

Techniquement, ANSI doit être identique à US-ASCII. Il fait référence à la norme ANSI X3.4, qui est simplement la version ratifiée de l'ASCII par l'organisation ANSI . L'utilisation des caractères du jeu de bits supérieur n'est pas définie en ASCII / ANSI car il s'agit d'un jeu de caractères 7 bits.

Cependant, des années d'utilisation abusive du terme par la communauté DOS et par la suite Windows ont laissé leur sens pratique comme «la page de codes système de la machine utilisée». La page de codes du système est également parfois appelée «mbcs», car sur les systèmes d'Asie de l'Est, il peut s'agir d'un codage de plusieurs octets par caractère. Certaines pages de codes peuvent même utiliser des octets effaçant le bit supérieur comme octets de fin dans une séquence multi-octets, donc ce n'est même pas strictement compatible avec ASCII ordinaire ... mais même alors, il est toujours appelé "ANSI".

Sur les paramètres par défaut des États-Unis et d'Europe occidentale, «ANSI» correspond à la page de codes Windows 1252. Ce n'est pas la même chose que ISO-8859-1 (bien qu'il soit assez similaire). Sur d'autres machines, cela pourrait être autre chose. Cela rend «ANSI» totalement inutile comme identifiant de codage externe.


32

À proprement parler, le codage ANSI n'existe pas. Familièrement, le terme ANSI est utilisé pour plusieurs codages différents:

  1. ISO 8859-1
  2. Windows CP1252
  3. Encodage système actuel sur une machine Windows (dans la terminologie de l'API Win32).

C'est faux. La page de codes Windows 1252 a été créée sur la base de la norme ISO 8859-1 mais n'est pas complètement égale. Le terme ANSI fait référence à la norme ISO 8859-x.
Patrik

17

Il était une fois Microsoft, comme tout le monde, qui utilisait des jeux de caractères 7 bits, et ils ont inventé le leur quand cela leur convenait, bien qu'ils aient conservé ASCII comme sous-ensemble de base. Ils ont ensuite réalisé que le monde était passé aux encodages 8 bits et qu'il existait des normes internationales, comme la famille ISO-8859. À cette époque, si vous vouliez vous procurer une norme internationale et que vous viviez aux États-Unis, vous l'avez achetée à l'American National Standards Institute, ANSI, qui a republié les normes internationales avec leur propre marque et numéros (c'est parce que le gouvernement américain veut conformité aux normes américaines et non aux normes internationales). Ainsi, la copie ISO-8859 de Microsoft indiquait "ANSI" sur la couverture. Et parce que Microsoft n'était pas très habitué aux normes à cette époque, ils ne l'ont pas fait Je me rends compte que l’ANSI a également publié de nombreuses autres normes. Ils ont donc fait référence aux normes de la famille ISO-8859 (et aux variantes qu'ils ont inventées, car ils ne comprenaient pas vraiment les normes à l'époque) par le nom sur la couverture, "ANSI", et il a trouvé son chemin dans Microsoft documentation utilisateur et donc dans la communauté des utilisateurs. C'était il y a environ 30 ans, mais vous entendez encore parfois le nom aujourd'hui.


les normes étaient des trucs de l'industrie donc les programmeurs étaient nouveaux par rapport aux normes puisque c'était une nouvelle industrie?
CoffeDeveloper

1
Ce n'était pas une nouvelle industrie au moment de la création de Microsoft.
Michael Kay

Microsoft a une attitude problématique et controversée à l'égard de l'interopérabilité en général. Quand ils ont décidé, à la fin des années 1990, «d'embrasser et d'étendre» les normes au lieu de les éviter directement, il s'agissait d'un changement remarquable, bien que ce ne soit toujours pas une approche responsable vers une interopérabilité adéquate. (Vous pourriez faire valoir que le progrès est impossible si vous ne respectez que les normes existantes, mais ce n'est évidemment pas la principale raison pour laquelle ils le font de cette façon.)
tripleee

14

ASCII définit simplement une page de codes 7 bits avec 128 symboles. ANSI étend cela à 8 bits et il existe plusieurs pages de codes différentes pour les symboles 128 à 255.

La dénomination ANSI n'est pas correcte car c'est en fait la norme ISO / IEC 8859 qui définit ces pages de codes. Voir ISO / IEC 8859 pour référence. Il existe 16 pages de codes ISO / IEC 8859-1 à ISO / IEC 8859-16.

Windows-1252 est à nouveau basé sur ISO / IEC 8859-1 avec quelques modifications principalement dans la plage du jeu de contrôles C1 dans la plage 128 à 159. Wikipedia indique que Windows-1252 est également appelé ISO-8859-1 avec une seconde trait d'union entre ISO et 8859. (Incroyable! Qui fait quelque chose comme ça?!?)


5

Fondamentalement, "ANSI" fait référence à la page de code héritée sur Windows. Voir aussi un article de Raymond Chen sur ce sujet:

La source de ceci vient du fait que la page de codes Windows 1252 était à l'origine basée sur un projet ANSI, qui est devenu la norme ISO 8859-1.

Les 127 premiers caractères sont identiques à ASCII dans la plupart des pages de codes, les caractères supérieurs varient cependant.

Cependant, ANSI ne signifie pas automatiquement CP1252 ou Latin 1.

Malgré toute confusion, vous devez simplement éviter de tels problèmes de nos jours et utiliser Unicode.


4

Juste au cas où votre PC n'est pas un PC "occidental" et que vous ne savez pas quelle page de code est utilisée, vous pouvez consulter cette page: Référence de l'API NLS (National Language Support)

[Microsoft a supprimé cette référence, la forme sous forme d'archive Web Référence de l'API NLS (National Language Support)

Ou vous pouvez interroger votre registre:

C:\>reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /f ACP

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
    ACP    REG_SZ    1252

End of search: 1 match(es) found.

C:\>

2

Lorsque vous utilisez des caractères à un octet, le format ASCII définit les 127 premiers caractères. Les caractères étendus de 128 à 255 sont définis par diverses pages de codes ANSI pour permettre une prise en charge limitée pour d'autres langues. Afin de donner un sens à une chaîne codée ANSI, vous devez savoir quelle page de code elle utilise.


1

Je me souviens quand le texte "ANSI" faisait référence aux pseudo codes d'échappement VT-100 utilisables sous DOS via le pilote ANSI.SYS pour modifier le flux de texte en streaming .... Probablement pas ce à quoi vous faites référence, mais si c'est le cas, voir http: //en.wikipedia.org/wiki/ANSI_escape_code


-4

ANSI (alias Windows-1252 / WinLatin1) est un codage de caractères de l'alphabet latin, assez similaire à ISO-8859-1 . Vous voudrez peut-être y jeter un œil sur Wikipedia .


6
Ce n'est pas CP1252 pour tout le monde; cela dépend beaucoup de la région.
Joey
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.