Проблема с символами, кодирующими текстовый буфер из процесса - PullRequest
0 голосов
/ 03 февраля 2019

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

Я пробовал разные кодировки:

  • utf-16 -> utf-8
  • ascii -> utf-8
  • windows-1251 -> utf-8
  • windows-1252 -> utf-8

Но не повезло: (

Он выводит только английские символы и цифры. Нет русских символов

<?php

header('Content-Type: text/html; charset=utf-8');

$cmd = "ping mail.ru";

execAndOutput($cmd);

function execAndOutput($cmd){
    $process = popen($cmd, 'r'); 

    while($out = fgets($process, 2048)) { 
        $out = mb_convert_encoding($out, "utf-8", "windows-1251");
        echo $out."<br>\n"; 
        ob_flush();flush(); 
    } 
    pclose($process); 
} ?>

С кодировкой 1251 у меня естьэто в выходных данных:

ЋЎ¬Ґ­ Ї ЄҐв ¬Ё б mail.ru [94.100.180.202] б 32 Ў ©в ¬Ё ¤ ­­ле: 
ЋвўҐв ®в 94.100.180.202: зЁб«® Ў ©в=32 ўаҐ¬п=118¬б TTL=49 
ЋвўҐв ®в 94.100.180.202: зЁб«® Ў ©в=32 ўаҐ¬п=118¬б TTL=49 

‘в вЁбвЁЄ  Ping ¤«п 94.100.180.202: 
Џ ЄҐв®ў: ®вЇа ў«Ґ­® = 4, Ї®«г祭® = 4, Ї®вҐап­® = 0 
(0% Ї®вҐам) 
ЏаЁЎ«Ё§ЁвҐ«м­®Ґ ўаҐ¬п ЇаЁҐ¬ -ЇҐаҐ¤ зЁ ў ¬б: 
ЊЁ­Ё¬ «м­®Ґ = 118¬бҐЄ, Њ ЄбЁ¬ «м­®Ґ = 120 ¬бҐЄ, ‘।­ҐҐ = 118 ¬бҐЄ 

Без какого-либо преобразования кодировки я получил это:

����� ����⠬� � mail.ru [94.100.180.200] � 32 ���⠬� ������: 
�⢥� �� 94.100.180.200: �᫮ ����=32 �६�=113�� TTL=46 
�⢥� �� 94.100.180.200: �᫮ ����=32 �६�=170�� TTL=46 

����⨪� Ping ��� 94.100.180.200: 
����⮢: ��ࠢ���� = 4, ����祭� = 4, ����ﭮ = 0 
(0% �����) 
�ਡ����⥫쭮� �६� �ਥ��-��।�� � ��: 
�������쭮� = 109�ᥪ, ���ᨬ��쭮� = 170 �ᥪ, �।��� = 135 �ᥪ

Ожидается (скопировано с терминала Windows):

Обмен пакетами с 127.0.0.1 по с 32 байтами данных:
Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128
Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128

Статистика Ping для 127.0.0.1:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек

Iхочу получить русских символов из консоли в браузере .

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Я нашел решение для этого.

Настройки консоли

В настройках консоли Windows я нашел текущую кодировку CP866 и добавил ее в mb_encoding.

Для русских символов в консоли:

mb_convert_encoding($out, 'utf-8', 'cp866');

или

 iconv('cp866', 'utf-8', $out);

Проверьте настройки консоли в цифрах какую кодировку использовать .

Теперь все работает как шарм.Большое спасибо за помощь!

0 голосов
/ 03 февраля 2019

Вы можете использовать iconv функцию

iconv('from_encoding', 'to_encoding',$str);

, также вы можете исправить свою кодировку следующим образом

iconv('utf-8', 'utf-8//IGNORE',$str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...