Кодировка php скрипта в консоли windows

houl1989

Новичок
Добрый день!
Никак не могу совладать с кодировкой php скрипта с кодировкой utf8 при запуске через консоль windows (cmd.exe). Надеялся избавиться от кракозябр установив в консоли шрифт lucida console и указав chcp 65001. В результате проблемы с русскими буквами по прежнему остаются. Если файл скрипта и консоль перевести в CP866 или CP1251, то все работает. Но хотелось бы работать со скриптами в utf8. Вот как это выглядит:
Код:
<?php
echo "Не пойму что происходит?\n";
echo "I can't understand what's the problem?\n"
?>
Результат ниже. Подскажите как решить проблему?
 

houl1989

Новичок
chcp 65001
which will change the code page to UTF-8. Also, you need to use Lucida console fonts.
Ну так я именно это и проделал, результат на скриншоте. Судя по комментариям проблема действительно имеет место быть?
 

Absinthe

жожо
Проверил - действительно не все буквы отображаются.

Консоль - это инструмент разработчика или администратора, он не для конечного пользователя.
Поэтому стоит использовать английский язык.
Или использовать терминал в кодировке UTF-8, такой он по умолчанию в других операционных системах. PHP под Windows используется крайне редко и не все функции поддерживаются.

Так что ставьте виртуалку и в ней используйте PHP: большинство Windows-разработчиков так делает.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Если уж совсем не захочется виртуалку и нужно только для локальной разработки, можно просто cygwin + mintty поставить, они умеют utf-8 в консоль под виндой.
 

AnrDaemon

Продвинутый новичок
Код:
zlib.output_compression = Off
implicit_flush = On
output_handler = "ob_iconv_handler"
iconv.input_encoding = "cp1251"
iconv.internal_encoding = "UTF-8"
iconv.output_encoding = "cp866"
Допилить до полного удовлетворения.
 
  • Like
Реакции: ksnk

ksnk

прохожий
Вот, немного попилил. Заодно и себе что-то напилилось... Под Windows у меня есть несколько вариантов стартовать скрипт. Из под PhpStorm'а командой Run. При этом вывод идет в консоль шторма с кодировкой cp1251. Можно просто стартовать в шеле - кодировка будет системная cp866.
Разница в моем случае - в разной установке переменных окружения, в частности переменной PROMPT. Вероятно, на другом компьютере разницу придется определять "по месту".
PHP:
if (PHP_SAPI === 'cli')
{
    $par=array(
        'iconv.input_encoding'=>'cp1251',
        'iconv.internal_encoding'=>'UTF-8',
        'iconv.output_encoding'=>'cp1251',
    );
    if(isset($_ENV['PROMPT']))
        $par['iconv.output_encoding']='cp866';

    ob_start('ob_iconv_handler');
    foreach($par as $k=>$v)ini_set($k,$v);
}

echo 'Привет!';
 

AnrDaemon

Продвинутый новичок
Не там пилишь.
Всё это пишется в "php-cli.ini"

(Для тех, кто не в курсе, под виндой PHP в первую очередь ищет "php-<sapi>.ini")
 

fixxxer

К.О.
Партнер клуба
Из под PhpStorm'а командой Run. При этом вывод идет в консоль шторма с кодировкой cp1251. Можно просто стартовать в шеле - кодировка будет системная cp866.
Ну делай в консоли chcp 1251 да и все.
 
Сверху