Które kodowania znaków są obsługiwane przez posix?

11

POSIX definiuje zachowanie narzędzi takich jak grep, awk, seditp, które pracują na plikach tekstowych. Ponieważ jest to plik tekstowy, myślę, że występują problemy z kodowaniem znaków.

Pytanie:

  • Jakie kodowanie znaków jest obsługiwane przez POSIX? (lub pliki tekstowe, jakie kodowanie może być obsługiwane przez systemy z kompilatorem POSIX?)
Yuki Inoue
źródło

Odpowiedzi:

19

POSIX nie wymaga kodowania określonych znaków. Jedynym znakiem na stałej pozycji jest null, który musi wynosić 00.

POSIX wymaga, aby istniały wszystkie znaki z jego przenośnego zestawu znaków . Przenośny zestaw znaków zawiera drukowalne znaki ASCII, spację, BEL, backspace, tab, powrót karetki, nowy wiersz, tabulator pionowy, wysuw formularza i null. Gdzie i jak są one kodowane, nie jest określone, z wyjątkiem tego, że:

  • Wszystkie są jednobajtowe (8 bitów).
  • Null jest reprezentowany przez wszystkie bity zero.
  • Cyfry 0–9 pojawiają się w tej kolejności w sposób ciągły.

Nie nakłada żadnych innych ograniczeń na reprezentację znaków, więc zgodny system może obsługiwać kodowanie z dowolną reprezentacją tych znaków, a także innych znaków.

Różne ustawienia regionalne w tym samym systemie mogą mieć różne reprezentacje tych znaków, z wyjątkiem .i /oraz

jeśli aplikacja korzysta z dowolnej pary ustawień narodowych, w których kodowanie znaków różni się, lub uzyskuje dostęp do danych z aplikacji przy użyciu ustawień regionalnych, które mają inne kodowania niż ustawienia narodowe używane przez aplikację, wyniki nie są określone.

Jedynymi plikami, które wszystkie systemy zgodne z POSIX muszą traktować w ten sam sposób, są pliki składające się w całości z pustych bajtów. Pliki traktowane jak tekst mają swoje wiersze zakończone reprezentacją kodowania znaku nowej linii PCS .

Michael Homer
źródło
5

Standard POSIX wprowadza ustawienia regionalne POSIX, które mają taką samą kolejność, jak zestaw znaków ASCII dla znaków w ASCII (Definicje podstawowe POSIX, pkt 7.3.2).

Poza tym w systemach, w których POSIX2_LOCALEDEFzdefiniowano stałą symboliczną (która powinna być zdefiniowana dla systemów zgodnych z XSI i może być testowana za pośrednictwem getconf POSIX2_LOCALEDEF), system obsługuje tworzenie nowych ustawień narodowych, przy użyciu localedefnarzędzia i definicji ustawień narodowych określonych w POSIX Base Definicje §7.3.

Definicje ustawień narodowych POSIX nie obsługują określania znaków według ich wartości Unicode, istnieją nowsze standardy, takie jak ISO / IEC TR 14652 (dostępne w domu ISO / IEC JTC1 / SC22 / WG20 home ) i ISO TR 30112 (szkic dostępny w ISO / IEC JTC1 / SC35 / WG5 home ), która unieważnia ISO / IEC TR 14652.

Inne powiązane standardy to ISO 14651 (dostępny na stronie ISO ITTF ) i algorytm sortowania Unicode (UCA, Unicode UTS # 10) .

Moduł Unicode :: Tussle Perl w CPAN zawiera przepisywanie Unicode kilku narzędzi uniksowych. Skrypty sed i awk oraz jednowierszowe można (stosunkowo łatwo) przepisać w Perlu dla obsługi Unicode.

W przypadku glibc wpisy bugzilli dla localedata komponentu mogą zapewniać widok statusu różnych ustawień regionalnych.

ninjalj
źródło
3
Zauważ, że kolejność ustawień narodowych POSIX określa porządek sortowania zgodny z ASCII, a nie rzeczywistą reprezentację kodowania.
Michael Homer,