“状态相关编码”是什么意思?“相同字节值”是什么意思?“初始和非初始换档状态”是什么意思?

1 php string encoding stateful character-encoding

我的计算机上使用的是Windows 10 家庭单语言版,它是64 位操作系统。

我已经安装了最新版本的XAMPP ,它在我的计算机上 安装了PHP 7.2.6 。

我在PHP 手册的段落中看到以下句子

我从PHP 手册中理解了该段落的大部分内容。但是,我不明白下面提到的同一段落中的最后一句话。

但请注意,在初始和非初始移位状态中可以使用相同字节值的状态相关编码可能会出现问题。

我在标题为“字符串类型的详细信息”的段落中提出了以下问题

  1. 在这种情况下,“状态相关的编码”是什么意思?
  2. 在这种情况下,“初始和非初始转变状态”是什么意思?
  3. 在这种情况下,可用于上述“初始和非初始”移位状态的“相同字节值”是什么意思?4.如何在“初始和非初始移位状态”中使用相同的字节值以及它如何出现问题?

Gia*_*zzi 5

某些编码具有字节标记,用于选择如何解释下一个字符(直到下一个标记)。

因此,例如在“日语”标记之后,接下来的字符被解释为日语字符(但例如每个字符 2 个字节),在标记“latin”之后,字符被解释为 latin1。

因此,要解码字符串,应该保留状态(例如,它是实际的解释)。

在上面的“示例”中,一个字节可以解释为日语或拉丁语1,具体取决于状态。最初,字符串具有默认状态,但如果您采用子字符串,您将错过“标记”,因此该字符串将被(可能)以错误的解释进行解释。

因此,应该复制状态(标记)并将其添加到每个子字符串的开头。

ISO 2022 定义了一种实现此类编码的方法,您将在维基百科文章中找到各种实现https://en.wikipedia.org/wiki/ISO/IEC_2022。

现在这样的编码已经过时了。Unicode 已经超越了它们(特别是在 2022 年很常见的地方,因此编码是个大问题。注意:UTF-8 也是状态相关的(对于字符/代码点内的字节),但是 UTF-8 的实现是状态将在每个字符(并且字符的第一个字节有一个预定义的范围)。Unicode 还保留了一些状态,但不鼓励在 unicode 中使用它(例如文本方向:右和左:这些最好由更高的编码设置级别(例如 HTML),并且不使用不鼓励的 unicode 方向代码)。