Xpoint
   [напомнить пароль]

(KOI8-R -> CP1251) 20x

Метки: [без меток]
2007-03-26 11:46:08 [обр] Ярослав Витязев[досье]

По мотивам:

<xxx> Если к кириллическому тексту в кодировке Windows-1251 20 раз подряд применить перекодирование KOI8-R→Windows-1251, в итоге будет получен исходный текст.
<yyy> гонишь!
...
<yyy> ну ты и гад, я теперь успокоиться не смогу, пока не проверю. :\

Исходный код:

<?php
$str = '(Вот такой вот текст)';

for ($i = 1; $i <= 20; $i++) { 
    $str = iconv('KOI8-R', 'CP1251', $str);
    echo "<br />{$i}. " . $str;
}
echo " &mdash; исходный текст... хмм...";

Результат:

  1. (бНР РЮЙНИ БНР РЕЙЯР)
  2. (Амп пчимх амп пеиъп)
  3. (юЛО ОВХЛУ ЮЛО ОЕХЗО)
  4. (Чкн нбукс чкн неугн)
  5. (вЙМ МАСЙЯ ВЙМ МЕСЦМ)
  6. (Бил люяиъ бил леяжл)
  7. (аХК КЧЪХЗ АХК КЕЪФК)
  8. (Юуй йвзуг юуй йезтй)
  9. (чСИ ИБГСЦ ЧСИ ИЕГРИ)
  10. (Вях хацяж вях хецпх)
  11. (бЪУ УЮЖЪФ БЪУ УЕЖОУ)
  12. (Азс счфзт азс сефнс)
  13. (юГЯ ЯВТГР ЮГЯ ЯЕТМЯ)
  14. (Чцъ ъбрцп чцъ ъерлъ)
  15. (вЖЗ ЗАПЖО ВЖЗ ЗЕПКЗ)
  16. (Бфг гюофн бфг геойг)
  17. (аТЦ ЦЧНТМ АТЦ ЦЕНИЦ)
  18. (Юрж жвмрл юрж жемхж)
  19. (чПФ ФБЛПК ЧПФ ФЕЛУФ)
  20. (Вот такой вот текст) — исходный текст... хмм...

Кто-нибудь может это прокомментировать?

спустя 12 минут [обр] Lynn «Кофеман»(6/571)[досье]
А что тут комментировать?
Перекодирование из koi8-r в windows-1251 это по сути перестановка. И, как и у любой перестановки, у неё есть цикл.
спустя 36 минут [обр] Алексей В. Иванов(25/2861)[досье]

Забавно.
А есть ещё такой прикол с KOI8-R: если у русских букв поотрезать старший бит, то получится строка транслитом. Пример:

<?
$str = "привет, мир! ПРИВЕТ МИР!";
for ($i = 0; $i < strlen($str); ++$i) {
   print chr(ord($str[$i]) & 127);
}
?>

Вывод: PRIWET, MIR! priwet mir!
Изначально так проектировалось, чтобы при передаче через 7-и битные каналы смысл сохранялся.

спустя 15 минут [обр] wiktar(0/20)[досье]
Ярослав Витязев[досье], так, скорее всего, это касается не только KOI-8 -> CP1251, а вообще любых однобайтовых кодовых таблиц.
спустя 12 минут [обр] Lynn «Кофеман»(6/571)[досье]
wiktar[досье]
Нет, не для любых. В koi8-r и cp1251 русские буквы (а-я, без ё) расположены на одном и том же месте (на последних 64 позициях), только в разном порядке. Поэтому перекодирование koi8-r => windows-1251 — это перестановка. Если вы попробуете проделать подобную операцию с cp866, например, то почти сразу получите ошибку от iconv'а.
Powered by POEM™ Engine Copyright © 2002-2005