Quels encodages de caractères sont pris en charge par posix?

11

Posix définit le comportement des outils tels que grep, awk, sed, etc qui travaillent contre les fichiers texte. Puisqu'il s'agit d'un fichier texte, je pense qu'il y a le (s) problème (s) d'encodage des caractères.

Question:

  • Quels sont les encodages de caractères pris en charge par POSIX? (ou, des fichiers texte de quel encodage peut être géré par les systèmes compatibles POSIX?)
Yuki Inoue
la source

Réponses:

19

Il n'y a pas d'encodage de caractères spécifique mandaté par POSIX. Le seul caractère dans une position fixe est null, qui doit être 00.

Ce que POSIX requiert, c'est que tous les caractères de son jeu de caractères portable existent. Le jeu de caractères portable contient les caractères ASCII imprimables, espace, BEL, retour arrière, tabulation, retour chariot, retour à la ligne, tabulation verticale, saut de page et null. Où ou comment ceux-ci sont codés n'est pas spécifié, sauf que:

  • Ils sont tous d'un seul octet (8 bits).
  • Null est représenté avec tous les bits zéro.
  • Les chiffres 0 à 9 apparaissent de manière contiguë dans cet ordre.

Il n'impose aucune autre restriction sur la représentation des caractères, donc un système conforme est libre de prendre en charge les encodages avec n'importe quelle représentation de ces caractères, et tout autre caractère en plus.

Différents paramètres régionaux sur le même système peuvent avoir différentes représentations de ces caractères, à l'exception de .et /, et

si une application utilise une paire de paramètres régionaux dans lesquels les codages de caractères diffèrent ou accède aux données d'une application à l'aide d'un paramètre régional qui a des codages différents des paramètres régionaux utilisés par l'application, les résultats ne sont pas spécifiés.

Les seuls fichiers que tous les systèmes compatibles POSIX doivent traiter de la même manière sont des fichiers composés entièrement d'octets nuls. Les fichiers traités comme du texte ont leurs lignes terminées par la représentation de l'encodage du caractère de nouvelle ligne du PCS .

Michael Homer
la source
5

La norme POSIX introduit une locale POSIX, qui a le même ordre que le jeu de caractères ASCII pour les caractères en ASCII (Définitions de base POSIX §7.3.2).

En plus de cela, sur les systèmes où la constante symbolique POSIX2_LOCALEDEFest définie (qui doit être définie pour les systèmes conformes à XSI et peut être testée via getconf POSIX2_LOCALEDEF), le système prend en charge la création de nouveaux paramètres régionaux, en utilisant l' localedefutilitaire et les définitions de paramètres régionaux comme spécifié dans POSIX Base Définitions §7.3.

Les définitions de paramètres régionaux POSIX ne prennent pas en charge la spécification de caractères par leur valeur Unicode, il existe des normes plus récentes, telles que ISO / IEC TR 14652 (disponible à la maison ISO / IEC JTC1 / SC22 / WG20 ) et ISO TR 30112 (projet disponible sur ISO / IEC JTC1 / SC35 / WG5 home ) qui rend obsolète ISO / IEC TR 14652.

D'autres normes connexes sont ISO 14651 (disponible sur le site ISO ITTF ) et l' algorithme de classement Unicode (UCA, Unicode UTS # 10) .

Le module Unicode :: Tussle Perl sur CPAN comprend des réécritures Unicode de plusieurs utilitaires Unix. Les scripts sed et awk et les lignes simples peuvent (relativement facilement) être réécrits en Perl pour le support Unicode.

Pour la glibc, les entrées de bugzilla pour le composant localedata peuvent fournir une vue de l'état des différents paramètres régionaux.

ninjalj
la source
3
Notez que l'ordre des paramètres régionaux POSIX définit l' ordre de classement correspondant à ASCII, plutôt que la représentation de codage réelle.
Michael Homer