Что это означает под «зависящими от состояния кодировками»?Что это означает под «одними и теми же байтовыми значениями»?Что означает «начальное и не начальное смещение»? - PullRequest
0 голосов
/ 08 июня 2018

Я использую Windows 10 Home Single Language Edition , которая является 64-разрядной операционной системой на моей машине.

Я установил самую последнюю версиюверсия XAMPP , которая установила PHP 7.2.6 на мою машину.

Я сталкиваюсь со следующим предложением из параграфа Руководство по PHP

Я понял большую часть абзаца из Руководство по PHP .Но я не понял последнее предложение из того же абзаца, который я упомянул ниже.

Обратите внимание, однако, что зависящие от состояния кодировки, где одни и те же байтовые значения могут использоваться в начальных ине начальные сдвиговые состояния могут быть проблематичными.

У меня есть следующие вопросы в контексте абзаца под названием Сведения о типе строки

  1. Чтоозначает ли это «зависящие от состояния кодировки» в этом контексте?
  2. Что означает «начальные и не начальные сдвиговые состояния» в этом контексте?
  3. Что означает «то же самое»значения байтов », которые могут использоваться в вышеупомянутых« начальных и не начальных »состояниях сдвига в этом контексте?4. Как можно использовать одни и те же значения байтов в «начальном и не начальном состояниях сдвига» и как это может быть проблематично?

1 Ответ

0 голосов
/ 08 июня 2018

Некоторые кодировки имеют байтовые метки, которые выбирают, как интерпретировать следующие символы (до следующей метки).

Так, например, после метки "японский" следующие символы интерпретируются как японские символы (но, например, 2 байта).за знак), после знака «латинский» символы интерпретируются как латинский 1.

Таким образом, чтобы декодировать строку, необходимо сохранить состояние (например, какая она является действительной интерпретацией).

В приведенном выше «примере» байт может интерпретироваться как японский или как латинский1, в зависимости от состояния.Первоначально строка имеет состояние по умолчанию, но если вы возьмете подстроку, вы пропустите «знак», поэтому строка будет интерпретирована (возможно) с неверной интерпретацией.

Поэтому необходимо скопировать статус (пометить) и поставить префикс в начале каждой подстроки.

ISO 2022 определяет способ реализации такой кодировки, и вы найдете в статье в Википедии различные реализации https://en.wikipedia.org/wiki/ISO/IEC_2022.

Теперь такие кодировкиустарели.Юникод превзошел их (особенно там, где 2022 были распространены, поэтому там, где кодировки были огромными проблемами. Примечание: UTF-8 также зависит от состояния (для байтов в символе / кодовой точке), но был реализован UTF-8, что состояние будет сброшено прикаждый символ (и первый байт символа имеет предопределенный диапазон). Unicode также сохраняет некоторые состояния, но не рекомендуется использовать его в Unicode (например, направление текста: правое и левое: их предпочтительно устанавливать кодировкой на более высоком уровне).уровень (например, HTML), а не с помощью кодов направления Unicode).

...