制表符可以出现在 iso-8859-8 文件中吗?

Can tab characters appear in an iso-8859-8 file?

我有一个我认为是 ISO-8859-8 格式的文件。但是,它里面有制表符,似乎没有出现在这个字符集中:

https://en.wikipedia.org/wiki/ISO/IEC_8859-8

这是否意味着该文件毕竟不是 ISO-8859-8 格式? ISO-8859-8 编码字符可以与制表符组合吗?

是的。

制表符 (\t) 是标准字符之一 C0 control codes,还有 Null ([=11=])、Bell/Alert (\a)、退格键 (\b)、换行符 (\n)、垂直制表符 (\v)、换页符 (\f)、回车符 Return (\r), 转义 (\x1B), 等等

According to Wikipedia's page on ISO/IEC 8859:

The ISO/IEC 8859 standard parts only define printable characters, although they explicitly set apart the byte ranges 0x00–1F and 0x7F–9F as "combinations that do not represent graphic characters" (i.e. which are reserved for use as control characters) in accordance with ISO/IEC 4873; they were designed to be used in conjunction with a separate standard defining the control functions associated with these bytes, such as ISO 6429 or ISO 6630. To this end a series of encodings registered with the IANA add the C0 control set (control characters mapped to bytes 0 to 31) from ISO 646 and the C1 control set (control characters mapped to bytes 128 to 159) from ISO 6429, resulting in full 8-bit character maps with most, if not all, bytes assigned. These sets have ISO-8859-n as their preferred MIME name or, in cases where a preferred MIME name is not specified, their canonical name. Many people use the terms ISO/IEC 8859-n and ISO-8859-n interchangeably.

IOW,即使官方字符表只列出了可打印字符,但 C0 控制字符,包括 Tab,出于所有实际目的,都是 ISO-8859-n 的一部分编码。

您的链接文章甚至明确说明了这一点。

ISO-8859-8 is the IANA preferred charset name for this standard when supplemented with the C0 and C1 control codes from ISO/IEC 6429.

“ISO 8859-8 文件”通常被解释为包含标准 C0、C1 和 DEL 的文件。所以你可以毫无问题地使用控制字符。

但从技术上讲,ISO 8859-8 只是定义维基百科中显示的字符。请记住,当时文件并不那么重要,而是不同系统之间的数据传输(您可能将传输的数据存储为本机文件,因此进行了转码,但“文件编码”的概念并不那么重要)。所以我们有 ISO 2022 和 ISO 4873,它们定义了编码的基本概念,以传输数据,它们定义了“ANSI 转义序列”。使用这样的序列,您可以重新定义 C0、C1 和两个字母块 (G0、G1) 的使用方式。

因此您的系统可能决定使用 ASCII 进行初始通信,然后切换 C0 以更好地在系统之间进行控制,然后使用 ISO 8859-8 加载 G0 和 G1,这样您就可以传输您的文本文件(然后也许另一种编码,用于另一种语言的第二个数据流。

因此,从技术上讲,维基百科表格是正确的,但现在我们使用共享文件而不对其进行转码,因此无需使用 ANSI 转义字符更改编码,因此我们使用“ISO 8859-8 文件”作为一种方式描述一个 ISO 8859-8 图形字符(G0 和 G1),我们允许我们使用额外的控制字符(通常是 TAB、NL(和 CR、LF),有时还有 NUL、VT)。这也嵌入在 IANA 使用的字符串 iso-8859-8 中,网络浏览器和电子邮件也是如此。但请注意:通常您不能使用所有 C0 和 C1 控制代码(有些是标准禁止的,有些不应该(通常)在文件中使用,例如 ANSI 转义序列、NUL 字节等可能会被误解或丢弃(并且可能这会带来安全问题。

简而言之:ISO 8859-8 在技术上没有定义控制代码。但通常我们允许其中一些在文件中(TAB 是其中之一)。检查文件协议以了解允许使用哪些控制代码(请不要使用 BEL 和 ANSI 转义字符)