Какие кодировки символов поддерживаются posix?

11

POSIX определяет поведение инструментов , таких как grep, awk, sed, и т.д. , которые работают против текстовых файлов. Поскольку это текстовый файл, я думаю, что есть проблема (ы) кодировки символов.

Вопрос:

  • Какие кодировки символов поддерживаются POSIX? (или текстовые файлы какой кодировки могут обрабатываться системами, совместимыми с POSIX?)
Юки Иноуэ
источник

Ответы:

19

Не существует конкретной кодировки символов, предписанной POSIX. Единственный символ в фиксированной позиции - ноль, который должен быть 00.

POSIX требует, чтобы все символы из его Переносимого набора символов существовали. Переносимый набор символов содержит печатаемые символы ASCII, пробел, BEL, возврат на одну позицию, табуляцию, возврат каретки, перевод строки, вертикальную табуляцию, подачу формы и ноль. Где и как они закодированы, не указано, за исключением того, что:

  • Все они представляют собой один байт (8 бит).
  • Ноль представлен всеми битами ноль.
  • Цифры 0-9 появляются непрерывно в этом порядке.

Он не накладывает никаких других ограничений на представление символов, поэтому соответствующая система может свободно поддерживать кодировки с любым представлением этих символов, а также с любыми другими символами.

Разные локали в одной и той же системе могут иметь разные представления этих символов, за исключением .и /, и

если приложение использует любую пару языковых стандартов, в которых кодировки символов отличаются, или получает доступ к данным из приложения, используя языковой стандарт, кодировка которого отличается от языковых стандартов, используемых приложением, результаты не указываются.

Единственные файлы, которые все POSIX-совместимые системы должны обрабатывать одинаково, - это файлы, состоящие полностью из нулевых байтов. Файлы, обработанные как текст, имеют свои строки, заканчивающиеся представлением кодировки символа новой строки PCS .

Майкл Гомер
источник
5

Стандарт POSIX представляет локаль POSIX, которая имеет тот же порядок, что и набор символов ASCII для символов в ASCII (Базовые определения POSIX §7.3.2).

Кроме того, в системах, где определена символическая константа POSIX2_LOCALEDEF(которая должна быть определена для XSI-совместимых систем и может быть протестирована с помощью getconf POSIX2_LOCALEDEF), система поддерживает создание новых локалей с использованием localedefутилиты и определений локалей, как указано в POSIX Base Определения §7.3.

Определения языкового стандарта POSIX не поддерживают указание символов по значению Unicode, есть более новые стандарты, такие как ISO / IEC TR 14652 (доступно на домашней странице ISO / IEC JTC1 / SC22 / WG20 ) и ISO TR 30112 (черновик доступен на ISO / IEC JTC1 / SC35 / WG5 home ), которая устарела ISO / IEC TR 14652.

Другими связанными стандартами являются ISO 14651 (доступен на сайте ISO ITTF ) и алгоритм сопоставления Unicode (UCA, Unicode UTS # 10) .

Модуль Unicode :: Tussle Perl в CPAN включает в себя переписывание Unicode нескольких утилит Unix. Скрипты sed и awk и однострочники (относительно легко) могут быть переписаны в Perl для поддержки Unicode.

Для glibc записи в bugzilla для компонента localedata могут предоставлять представление о состоянии различных локалей.

ninjalj
источник
3
Обратите внимание , что в локали упорядочение определяет порядок сопоставления порядок согласования ASCII, а не фактическое представление кодирования.
Майкл Гомер