Уведомления

Группа в Telegram: @pythonsu

#1 Май 6, 2011 10:12:13

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

print() не выводит кириллицу (apache cgi)

подключил python3 как cgi к апач2.2
вывожу кириллицу через print()
получаю

File “/home/python3/www/engine/as_base.py”, line 57, in log
print(' %s' % (type, text))
UnicodeEncodeError: ‘ascii’ codec can't encode character ‘\u0432’ in position 3: ordinal not in range(128)

пробовал text.encode('utf-8', ‘ignore’)

получается на экране:

b'\xd0\xb2 res/proxy.txt 0 \xd0\xbf\xd1\x80\xd0\xbe\xd0\xba\xd1\x81\xd0\xb8'

все файлы в utf-8, текст прописан в них
при запуске шлется хидер что контент в utf-8

что тут не так?



Офлайн

#2 Май 6, 2011 10:52:34

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

print() не выводит кириллицу (apache cgi)

>b'\xd0\xb2 res/proxy.txt 0 \xd0\xbf\xd1\x80\xd0\xbe\xd0\xba\xd1\x81\xd0\xb8'
это нормальный utf8

что выдаст если в консоли запустить скрипт?
попробуйте скачать страничку, через wget например.

Офлайн

#3 Май 6, 2011 11:04:06

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

print() не выводит кириллицу (apache cgi)

$ cat index.html\?start.1

ну также, как и в сорцах страницы:

<pre>
<a href='?stop'>stop</a>
b'\xd0\xb2 res/proxy.txt 0 \xd0\xbf\xd1\x80\xd0\xbe\xd0\xba\xd1\x81\xd0\xb8'
b'\xd0\xb7\xd0\xb0\xd0\xb3\xd1\x80\xd1\x83\xd0\xb7\xd0\xb8\xd0\xbb\xd0\xb8 0 \xd0\xbf\xd1\x80\xd0\xbe\xd0\xba\xd1\x81\xd0\xb8'
<br />executed success!

браузер никогда не понимал подобную кодировку



Офлайн

#4 Май 6, 2011 11:35:31

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

print() не выводит кириллицу (apache cgi)

значить ошибка в исходнике, он выдает представление строки вместо самой строки. покажите скрипт.

Офлайн

#5 Май 6, 2011 16:17:31

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

print() не выводит кириллицу (apache cgi)

print('<title>русский текст</title>'.encode('utf-8'))
sys.exit(0)
выводит

b'<title>\xd1\x80\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xb8\xd0\xb9 \xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82</title>'

а ещё один вариант:
output = lambda msg: (sys.stdout.buffer.write(b'Content-type: text/html;charset=utf-8\n\n'),
sys.stdout.buffer.write(msg))

output('тест'.encode('utf-8'))
выводит по-русски, но после него идет Content-type: text/html;charset=utf-8\n\n обычным текстом



Офлайн

#6 Май 6, 2011 18:30:56

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

print() не выводит кириллицу (apache cgi)

в общем, рабочий пример запуска python3 как CGI в апач 2.2 с кириллицей в браузере вот:

 #!/usr/local/bin/python3
import sys, os
os.dup2(1, 2) # copy stderr->stdout
sys.stdout.buffer.write(b'Content-type: text/html;charset=utf-8\n\n')

def out(msg):
sys.stdout.buffer.write(msg.encode('utf8'))
sys.stdout.flush()

# test
import time
for i in range(10):
out('кириллица<br />')
time.sleep(1)
файл сохраняем в utf-8
в браузере тоже должна быть выбрана эта кодировка
все ошибки копируются в stdout, т.е. в браузер


подключение в httpd.conf:
- создаем вирт. хост, добавляем хэндлер
- в директории со скриптами добавляем +ExecCGI
- ставим на скрипт права на выполнение: chmod +x script.py
 <VirtualHost localhost:80>
ServerAdmin admin@localhost2
DocumentRoot /home/python3/www
ServerName pyweb
ErrorLog logs/pyweb_errors
CustomLog logs/pyweb_custom common

AddHandler cgi-script .cgi .py .pyw # важно
</VirtualHost>

<Directory "/home/python3/www">
DirectoryIndex start.pyw
Options +ExecCGI # важно
</Directory>
вроде бы больше ничего не требуется



Офлайн

#7 Дек. 7, 2012 17:02:17

IIIypuk
От: /root/
Зарегистрирован: 2012-09-23
Сообщения: 8
Репутация: +  0  -
Профиль   Адрес электронной почты  

print() не выводит кириллицу (apache cgi)

Игнат, а через print никак нельзя вывести?

Офлайн

#8 Янв. 28, 2013 10:12:38

CapMen
Зарегистрирован: 2013-01-28
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

print() не выводит кириллицу (apache cgi)

IIIypuk
Игнат, а через print никак нельзя вывести?

В Windows:
 
#!c:/python33/python.exe
# -*- coding: cp1251 -*-
print("Content-type: text/html\n\n");

print('привет')

или

 
#!c:/python33/python.exe
# coding: cp1251
print("Content-type: text/html\n\n");

print('привет')



Отредактировано CapMen (Янв. 28, 2013 10:51:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version