POSIX 定义了诸如grep
、awk
、sed
等针对文本文件工作的工具的行为。由于它是一个文本文件,我认为存在字符编码的问题。
问题:
- POSIX 支持哪些字符编码? (或者,POSIX 兼容系统可以处理什么编码的文本文件?)
答案1
POSIX 没有强制规定特定的字符编码。固定位置唯一的字符是空字符,必须是 00。
POSIX 所要求的是它的所有字符便携式字符集存在。可移植字符集包含可打印的 ASCII 字符、空格、BEL、退格、制表符、回车符、换行符、垂直制表符、换页符和 null。未指定这些编码的位置或方式,但以下情况除外:
- 它们都是单个字节(8 位)。
- Null 用所有位都为零来表示。
- 数字 0-9 按该顺序连续出现。
它对字符的表示没有任何其他限制,因此符合标准的系统可以自由地支持使用这些字符的任何表示以及任何其他字符的编码。
.
同一系统上的不同区域设置可以对这些字符有不同的表示形式,但and/
和除外
如果应用程序使用字符编码不同的任意一对区域设置,或者使用与应用程序使用的区域设置具有不同编码的区域设置来访问应用程序中的数据,则结果是未指定的。
所有 POSIX 兼容系统都需要以相同方式处理的唯一文件是完全由空字节组成的文件。被视为文本的文件有其以 PCS 换行符的编码表示形式终止的行。
答案2
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 国际乒联网站)和Unicode 排序算法(UCA、Unicode UTS#10)。
这Unicode::争斗CPAN 的 Perl 模块包括几个 Unix 实用程序的 Unicode 重写。 sed 和 awk 脚本以及单行语句可以(相对容易地)用 Perl 重写以支持 Unicode。
对于 glibc 来说,组件 localedata 的 bugzilla 条目可以提供不同区域设置的状态视图。