PHP UTF-8 в Windows кодирование командной строки - PullRequest
11 голосов
/ 30 октября 2009

Все в вопросе: у меня есть скрипт Php, который является файлом UTF-8. В этом сценарии я хочу сделать это:

  <?
  echo "âêïû\n";
  ?>

Если я запускаю его в командной строке Windows, я получаю следующее:

C:\php>php -c C:\WINDOWS\php.ini -f mysqldump.php
âêïû
C:\php>

Мне не удалось найти правильную схему конвертации. Я пробовал также этот код:

$tab = mb_list_encodings();
foreach ($tab as $enc1) {
  foreach ($tab as $enc2) {
    $t=mb_convert_encoding("âêïû\n", $enc1, $enc2);
    if (strlen($t)<14) {
      echo $enc1." ".$enc2." = ".$t."\n";
    }
  }
}

И я не нашел правильного преобразования!

Любая помощь будет принята с благодарностью

Ответы [ 4 ]

18 голосов
/ 30 октября 2009

Проблема в том, что Windows cmd line по умолчанию не поддерживает UTF8. Из этой ссылки , если вы будете следовать этим

  1. Открыть окно командной строки
  2. Измените свойства окна, чтобы использовать что-то кроме растрового шрифта по умолчанию. Кажется, шрифт Lucida Console True Type работает хорошо.
  3. Запустите "chcp 65001" из командной строки

Вы должны быть в состоянии вывести utf8.

7 голосов
/ 30 октября 2009

Вы поставили меня на правильный путь, но возникла проблема (я люблю Windows \ o /):

C:\php>chcp 65001
Page de codes active : 65001
C:\php>php -c C:\WINDOWS\php.ini -f mysqldump.php | more
Mémoire insuffisante.

Mémoire insffisante = недостаточно памяти.

Если я попытаюсь

C:\php>chcp 1252
C:\php>php -c C:\WINDOWS\php.ini -f mysqldump.php
C:\php>ééîîïïÂÂÂÂâûü

это работает. Только Бог знает почему. Но это работает. Спасибо, что поставили меня на правильный путь !!

Кстати, код php для правильного перехода из UTF8 в командную строку:

  echo mb_convert_encoding($utf8_string, "pass", "auto");
0 голосов
/ 20 ноября 2018

Попробуйте еще один. Он работает с русской кодировкой, я надеюсь, что он будет работать с французским:

class ConsoleHelper
{
    /**
     * @var boolean
     */
    private static $isEncodingSet = false;

    /**
     * @param string $message
     * @return string
     */
    public static function encodeMessage($message)
    {
        $isWindows = (DIRECTORY_SEPARATOR == '\\');
        if ($isWindows) {
            if ( ! self::$isEncodingSet) {
                shell_exec('chcp 866');
                self::$isEncodingSet = true;
            }
            $message = iconv('utf-8', 'cp866', $message);
        }
        return $message;
    }
}
0 голосов
/ 14 мая 2018

По умолчанию выглядит кодировка Кодовая страница 437 .

...