1. PHP / Говнокод #12134

    +141

    1. 1
    C:\>php -r "echo mb_convert_encoding('хуй', 'cp866', 'windows-1251') . chr(7);"

    Запостил: __proto__, 15 Ноября 2012

    Комментарии (15) RSS

    • Вот так этот код будет не настолько унылым:
      test@test:~$ php -r "echo substr(mb_convert_encoding('хуй __proto__', 'cp866', 'windows-1251'),2);"
      © __proto__
      P.S. Консоль должна работать в цп1251.
      Ответить
      • $ php -r "$v = 'тест'; system('iconv -f cp1251 -t utf-8 ' . $v);"
        Ответить
    • php -r "echo mb_convert_encoding('его', 'cp866', 'cp866') . chr(7);"
      Так смешнее. Или даже так:
      php -r "echo mb_convert_encoding('его', 'cp1251', 'cp1251') . chr(7);"
      Одного его.
      Ответить
      • А в чем прикол?
        Ответить
        • В том, что Винда напечатает слово «хую». То, что в кавычках, интерпретируется как cp1251, а на экран выводится как cp866. У винконсоли неявное приведение кодировки, которое вносит путаницу.
          Ответить
          • Даже так:
            C:\>php -r "echo 'его';"
            хую
            Делалось это для совместимости с досовскими программами. На самом деле для совместимости с программистами, набирающими программы в виндовом Блокноте.
            Ответить
            • Ясно. Про то что консоль работает в 866 я знал, а вот чего получится при преобразовании проверить было не на чем, т.к. сейчас с ведроида.
              Ответить
              • На самом деле у винконсоли есть и уникодовский вариант API:
                http://msdn.microsoft.com/en-us/library/cc194797.aspx

                Новый FAR даже греческие буквы и расширенную латиницу на одной странице с русскими выводит. В качестве восьмибитной же кодировки в русской Винде по умолчанию используется 866, чтобы старые программы смогли рисовать рамки.
                Ответить
                • /tmp/8$ mkdir 試験
                  /tmp/8$ cd 試験
                  /tmp/8/試験$
                  А вот так она умеет? ;)

                  > В качестве восьмибитной же кодировки в русской Винде по умолчанию используется 866, чтобы старые программы смогли рисовать рамки.
                  И вообще что-то выводить. Угу. Причем стандартные dir и.т.п. не видят кодировку, которую выставляет chcp, и в итоге, если консоль переключить на другую кодировку, выводят хлам.
                  Ответить
                • > чтобы старые программы смогли рисовать рамки
                  +--------------------+
                  |       Borders      |   
                  +--------------------+
                  | Just | Like | So?  |
                  +------+------+------+
                  Ответить
                  • +-----------------------------------------+
                    |       Kill yourself?                    |   
                    +-----------------------------------------+
                    | Yes | No | Remind me later              |
                    +-----------------------------------------+

                    + да
                    - нет
                    не изменять рейтинг - напомнить позже
                    Ответить
                    • Ухты. Минимум 2 человека, хотят, чтобы я сохранил себе жизнь. Мне лестно. Буду жить и ради них тоже.
                      Ответить
                  • Не так красиво
                    Ответить

    Добавить комментарий