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

11

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

Pergunta:

  • Quais são as codificações de caracteres suportadas pelo POSIX? (ou, arquivos de texto de qual codificação pode ser manipulada por sistemas compatíveis com POSIX?)
por Yuki Inoue 12.06.2016 / 08:01

2 respostas

19

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

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

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

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 quaisquer outros caracteres adicionais.

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

if an application uses any pair of locales where the character encodings differ, or accesses data from an application using a locale which has different encodings from the locales used by the application, the results are unspecified.

Os únicos arquivos que todos os sistemas compatíveis com POSIX são obrigados a tratar da mesma maneira são arquivos compostos inteiramente de 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 .

    
por 12.06.2016 / 08:54
5

O padrão POSIX introduz um código de idioma POSIX, que tem a mesma ordem do conjunto de caracteres ASCII para caracteres em ASCII (POSIX Base Definitions §7.3.2).

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

As definições de localidade POSIX não suportam a especificação de caracteres pelo seu valor Unicode, existem padrões mais novos, como o ISO / IEC TR 14652 (disponível no ISO / IEC JTC1 / SC22 / WG20 casa ), e ISO TR 30112 (rascunho disponível no ISO / IEC JTC1 / SC35 / WG5 casa ), que torna obsoleto o ISO / IEC TR 14652.

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

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

Para a glibc, as entradas do bugzilla para o componente localedata podem fornecer uma vista do status de diferentes localidades.

    
por 12.06.2016 / 12:26