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

问题描述 投票:0回答:1

我在我的计算机上使用 Windows 10 Home Single Language Edition,这是一个 64 位操作系统

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

我在 PHP 手册

的段落中看到以下句子

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

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

我在标题为字符串类型的详细信息

的段落中提出了以下问题
  1. 在此上下文中“状态相关编码”是什么意思?
  2. 在此上下文中“初始和非初始转变状态”是什么意思?
  3. 在此上下文中,可用于上述“初始和非初始”移位状态的“相同字节值”是什么意思? 4.如何在“初始和非初始移位状态”中使用相同的字节值以及它如何会出现问题?
php string encoding character-encoding stateful
1个回答
5
投票

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

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

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.