Quais codificações de caracteres são suportadas pelo posix?

11

POSIX define o comportamento de ferramentas como grep, awk, sed, etc, que trabalham contra arquivos de texto. Como é um arquivo de texto, acho que há o (s) problema (s) da codificação de caracteres.

Questão:

  • Quais são as codificações de caracteres suportadas pelo POSIX? (ou arquivos de texto de que codificação pode ser manipulada por sistemas compatíveis com POSIX?)
Yuki Inoue
fonte

Respostas:

19

Não há codificação de caracteres específica exigida pelo POSIX. O único caractere em uma posição fixa é nulo, que deve ser 00.

O que o POSIX exige é que todos os caracteres do seu Conjunto de caracteres portáteis existam. O Conjunto de caracteres portáteis contém os caracteres ASCII imprimíveis, espaço, BEL, backspace, guia, retorno de carro, nova linha, guia vertical, avanço de formulário e nulo. Onde ou como esses são codificados não é especificado, exceto que:

  • Eles são todos um byte único (8 bits).
  • Nulo é representado com todos os bits zero.
  • Os dígitos de 0 a 9 aparecem contíguos nessa ordem.

Ele não impõe outras restrições à representação de caracteres; portanto, um sistema em conformidade é livre para suportar codificações com qualquer representação desses caracteres e outros caracteres adicionais.

Locais diferentes no mesmo sistema podem ter representações diferentes desses caracteres, com exceção de .e /, e

se um aplicativo usar qualquer par de códigos de idioma em que as codificações de caracteres sejam diferentes ou acessar dados de um aplicativo usando um código de idioma que tenha codificações diferentes dos códigos de idioma usados ​​pelo aplicativo, os resultados não serão especificados.

Os únicos arquivos que todos os sistemas compatíveis com POSIX devem tratar da mesma maneira são arquivos que consistem inteiramente em bytes nulos. Os arquivos tratados como texto têm suas linhas terminadas pela representação da codificação do caractere de nova linha do PCS .

Michael Homer
fonte
5

O padrão POSIX introduz um código de idioma POSIX, que tem a mesma ordem que o conjunto de caracteres ASCII para caracteres em ASCII (Definições básicas POSIX §7.3.2).

Além disso, em sistemas em que a constante simbólica POSIX2_LOCALEDEFé definida (que deve ser definida para sistemas em conformidade com XSI e pode ser testada por meio de getconf POSIX2_LOCALEDEF), o sistema suporta a criação de novas localidades, usando o localedefutilitário e definições de localidade, conforme especificado no POSIX Base Definições §7.3.

As definições de localidade POSIX não suportam a especificação de caracteres por seu valor Unicode, existem padrões mais recentes, como ISO / IEC TR 14652 (disponível na página ISO / IEC JTC1 / SC22 / WG20 ) e ISO TR 30112 (rascunho disponível no ISO / IEC JTC1 / SC35 / WG5 ), que obsoleta a ISO / IEC TR 14652.

Outros padrões relacionados são a ISO 14651 (disponível no site ISO ITTF ) e o Algoritmo de Collation Unicode (UCA, Unicode UTS # 10) .

O módulo Unicode :: Tussle Perl no CPAN inclui reescritas Unicode de vários utilitários Unix. Os scripts sed e awk e one-liners podem (relativamente facilmente) ser reescritos no Perl para suporte a Unicode.

Para glibc, as entradas do bugzilla para os dados locais do componente podem fornecer uma visão do status de diferentes localidades.

ninjalj
fonte
3
Observe que a ordem do código do idioma POSIX define a ordem de intercalação correspondente ao ASCII, em vez da representação de codificação real.
Michael Homer