У меня есть программа на Python, которая работает очень хорошо. Он подключается к нескольким веб-сайтам и выводит нужную информацию. Поскольку не все веб-сайты закодированы с помощью utf-8, я запрашиваю кодировку из заголовков и использую метод unicode(string, encoding)
для декодирования (я не уверен, что это подходящий способ сделать это, но он работает довольно хорошо). Когда я запускаю программу python, я не получаю ??? маркирует и работает нормально. Но когда я запускаю программу с помощью функции system
php, я получаю эту ошибку:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0131' in position 41: ordinal not in range(128)
Это специфичная для Python ошибка, но меня смущает то, что я не получаю эту ошибку, когда запускаю программу с помощью терминала. Я получаю это только тогда, когда использую функцию system
php и вызываю программу из php. Что может быть причиной этой проблемы?
Вот пример кода:
php-код, который вызывает программу python:
system("python somefile.py $search") // where $search is the variable coming from an input
код питона:
encoding = "iso-8859-9"
l = "some string here with latin characters"
print unicode("<div class='line'>%s</div>" % l, encoding)
# when I run this code from terminal it works perfect and I receive no ??? marks
# when I run this code from php, I receive the error above