lower() меняет кодировку текста

183
19 мая 2018, 00:20

пытаюсь связать python с php, а именно - внедрить нейронные сети в сайт.
вызываю из php скрипт таким образом:

$x = shell_exec("python C:/Users/mx/script.py \"".$_POST["text"]."\" 2>&1");
echo($x);

в script.py написано следующее:

import sys
tx = sys.argv[1]
tx = tx.lower()
print(tx)

в итоге я вижу текст вида �����, но если я уберу строку tx = tx.lower(), то текст вернётся в нужной кодировке, так как я его вписал на странице. любые русские буквы превращаются в знаки вопроса, остальные символы отображаются нормально. при этом непосредственно из cmd всё работает как надо.

можно, конечно, подготовить текст в php, но, думаю, это не совсем правильно.

как получить текст в нормальной кодировке после обработки в python?

и ещё вопрос по поводу сброса вывода, мне в php нужна лишь последняя строка, т.е. непосредственно результат работы сети. я обложился функциями сброса:

sys.stdout.flush()
print(tx, flush=True)
sys.stdout.flush()
sys.exit()

однако всё равно возвращается лишняя строка: Using TensorFlow backend. , причём после вывода print(). как правильно получать от скрипта только нужные данные?

Answer 1

разобрался.

cmd работает в cp1251, php в UTF-8.

что бы нормально работало надо перед запуском shell_exec перекодировать текст в cp1251, иначе они будут иметь разную длину (при тестах из php и cmd текст выводился одинаково, однако len(text) показывал 10 для php, и 5 для cmd).

так же, для вывода нам надо перекодировать всё обратно, иначе мы будем видеть те самые �����.

$tx = iconv("UTF-8", "cp1251", $_POST["text"]);
$cmd = "python C:/Users/mx/script.py \"".$tx."\" 2>&1";
$x = shell_exec($cmd);
$x = iconv("cp1251", "UTF-8", $x);
echo($x);

помните что shell_exec потенциально опасная функция, всегда проверяйте то, что вы ей передаёте

READ ALSO
Генерация ключа для защиты от curl

Генерация ключа для защиты от curl

Я, конечно, понимаю, что curl - это вообще законная вещьНо в один прекрасный момент какой-то пользователь сайта сделал цикл, который отправляет...

188
Что такое $this?

Что такое $this?

Никак не могу понять что собой представляет $this в PHP ООПВроде бы и ясно, а вроде бы и нет, объясните кто может, зарание спасибо на ответ!

195
Работа с куками в curl

Работа с куками в curl

Допустим у меня есть файл с куками, сгенерированный с помощью curlКак мне в отдельной функции можно обратиться к ссылке, используя эти же куки?Юзерагент...

161
Обновление страницы (AJAX PHP)

Обновление страницы (AJAX PHP)

Сразу оговорюсь, я дилетант, а не программист, задаю вопрос с целью понимания сутиЕсть страница status

314