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

时间:2018-06-08 10:31:35

标签: php string encoding character-encoding php-7

我在我的计算机上使用 Windows 10家庭单一语言版这是 64位操作系统

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

我在PHP Manual

的段落中看到了以下句子

我理解PHP Manual段落的大部分内容。但是,我并不理解我在下面提到的同一段落的最后一句话。

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

我在标题为Details of the String Type

的段落中提到了以下问题
  1. 状态依赖编码是什么意思'在这种情况下?
  2. 初始和非初始班次状态是什么意思'在这种情况下?
  3. 相同的字节值是什么意思'可用于上述初始和非初始的'在这种情况下转变状态? 4.如何在初始和非初始移位状态中使用相同的字节值。以及它如何成为问题?

1 个答案:

答案 0 :(得分:4)

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

所以,例如在"日语"之后标记下一个字符被解释为日文字符(但例如每个字符2个字节),在标记" latin"之后,字符被解释为latin1。

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

在上面的"示例"中,一个字节可以被解释为日语或Latin1,具体取决于状态。最初一个字符串有一个默认状态,但如果你带一个子字符串,你会错过"标记",所以字符串将被解释(可能),解释错误。

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

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

现在这样的编码已经过时了。 Unicode已经超越了它们(特别是2022是常见的,所以编码是一个巨大的问题。注意:UTF-8也依赖于状态(对于字符/代码点中的字节),但是实现了UTF-8,状态将被重置为每个字符(字符的第一个字节都有一个预定义的范围).Unicode也保留一些状态,但不建议在unicode中使用它(如文本方向:左右:这些应该最好通过更高的编码来设置)级别(例如HTML),而不是阻止unicode方向代码。)