posix支持哪些字符编码?


11

POSIX定义的工具,如行为grepawksed,等这些工作对文本文件。由于它是文本文件,因此我认为存在字符编码的问题。

题:

  • POSIX支持什么字符编码?(或者,POSIX兼容系统可以处理哪种编码的文本文件?)

Answers:


19

没有POSIX要求的特定字符编码。固定位置的唯一字符为null,必须为00。

POSIX所需的是存在其可移植字符集中的所有字符。可移植字符集包含可打印的ASCII字符,空格,BEL,退格键,制表符,回车符,换行符,垂直制表符,换页符和null。除了以下方面,未指定编码的位置或方式:

  • 它们都是一个字节(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主页)淘汰了ISO / IEC TR 14652。

其他相关标准是ISO 14651(在ISO ITTF站点上可用)和Unicode排序算法(UCA,Unicode UTS#10)

CPAN 的Unicode :: Tussle Perl模块包括几个Unix实用程序的Unicode重写。可以在Perl中重写sed和awk脚本以及单行脚本(相对容易)以支持Unicode。

对于glibc,组件localedata的bugzilla条目可以提供不同语言环境状态的视图。


3
请注意,POSIX语言环境排序定义了与ASCII匹配的整理顺序,而不是实际的编码表示形式。
Michael Homer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.