Welche Zeichenkodierungen werden von posix unterstützt?

11

POSIX definiert das Verhalten von Werkzeugen wie grep, awk, sedusw. , die Arbeit gegen Textdateien. Da es sich um eine Textdatei handelt, gibt es meiner Meinung nach das Problem der Zeichenkodierung.

Frage:

  • Welche Zeichencodierungen werden von POSIX unterstützt? (oder Textdateien, welche Codierung von POSIX-kompatiblen Systemen verarbeitet werden kann?)
Yuki Inoue
quelle

Antworten:

19

Es gibt keine von POSIX vorgeschriebene spezifische Zeichenkodierung. Das einzige Zeichen an einer festen Position ist null, was 00 sein muss.

Was POSIX benötigt, ist, dass alle Zeichen aus seinem tragbaren Zeichensatz vorhanden sind. Der tragbare Zeichensatz enthält die druckbaren ASCII-Zeichen, Leerzeichen, BEL, Rücktaste, Registerkarte, Wagenrücklauf, Zeilenumbruch, vertikale Registerkarte, Formularvorschub und Null. Wo oder wie diese codiert sind, ist nicht angegeben, außer dass:

  • Sie sind alle ein einzelnes Byte (8 Bit).
  • Null wird mit allen Bits Null dargestellt.
  • Die Ziffern 0-9 erscheinen zusammenhängend in dieser Reihenfolge.

Die Darstellung von Zeichen unterliegt keinen weiteren Einschränkungen, sodass ein konformes System Codierungen mit jeder Darstellung dieser Zeichen und anderen Zeichen zusätzlich unterstützen kann.

Verschiedene Gebietsschemas auf demselben System können unterschiedliche Darstellungen dieser Zeichen haben, mit Ausnahme von .und /, und

Wenn eine Anwendung ein Gebietsschemapaar verwendet, bei dem sich die Zeichencodierungen unterscheiden, oder auf Daten einer Anwendung mit einem Gebietsschema zugreift, das andere Codierungen als die von der Anwendung verwendeten Gebietsschemas aufweist, sind die Ergebnisse nicht angegeben.

Die einzigen Dateien, die alle POSIX-kompatiblen Systeme auf dieselbe Weise behandeln müssen, sind Dateien, die vollständig aus Null-Bytes bestehen. Bei Dateien, die als Text behandelt werden, werden die Zeilen durch die Darstellung des Zeilenumbruchzeichens des PCS durch die Codierung beendet .

Michael Homer
quelle
5

Der POSIX-Standard führt ein POSIX-Gebietsschema ein, das dieselbe Reihenfolge wie der ASCII-Zeichensatz für Zeichen in ASCII hat (POSIX-Basisdefinitionen §7.3.2).

Außerdem unterstützt das System auf Systemen, auf denen die symbolische Konstante POSIX2_LOCALEDEFdefiniert ist (die für XSI-konforme Systeme definiert werden soll und über die getestet werden kann getconf POSIX2_LOCALEDEF), die Erstellung neuer Gebietsschemas unter Verwendung des localedefDienstprogramms und der in POSIX Base angegebenen Gebietsschemadefinitionen Definitionen §7.3.

POSIX-Gebietsschemadefinitionen unterstützen die Angabe von Zeichen anhand ihres Unicode-Werts nicht. Es gibt neuere Standards wie ISO / IEC TR 14652 (verfügbar in der ISO / IEC JTC1 / SC22 / WG20-Startseite ) und ISO TR 30112 (Entwurf verfügbar unter ISO / IEC JTC1 / SC35 / WG5 (Home ), wodurch ISO / IEC TR 14652 überholt wird.

Weitere verwandte Standards sind ISO 14651 (verfügbar auf der ISO ITTF-Website ) und der Unicode-Kollatierungsalgorithmus (UCA, Unicode UTS # 10) .

Das Unicode :: Tussle Perl-Modul bei CPAN enthält Unicode-Umschreibungen mehrerer Unix-Dienstprogramme. sed- und awk-Skripte und Einzeiler können (relativ einfach) in Perl für die Unicode-Unterstützung neu geschrieben werden.

Für glibc können Bugzilla-Einträge für lokale Komponentendaten eine Ansicht des Status verschiedener Gebietsschemas bereitstellen.

Ninjalj
quelle
3
Beachten Sie, dass die POSIX locale Reihenfolge definiert Kollation um passende ASCII, anstatt tatsächliche Codierung Darstellung.
Michael Homer