Форум сайта python.su
подключил 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
что тут не так?
Офлайн
>b'\xd0\xb2 res/proxy.txt 0 \xd0\xbf\xd1\x80\xd0\xbe\xd0\xba\xd1\x81\xd0\xb8'
это нормальный utf8
что выдаст если в консоли запустить скрипт?
попробуйте скачать страничку, через wget например.
Офлайн
$ 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!
браузер никогда не понимал подобную кодировку
Офлайн
значить ошибка в исходнике, он выдает представление строки вместо самой строки. покажите скрипт.
Офлайн
print('<title>русский текст</title>'.encode('utf-8'))
sys.exit(0)
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'))
Офлайн
в общем, рабочий пример запуска 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)
<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>
Офлайн
Игнат, а через print никак нельзя вывести?
Офлайн
IIIypuk
Игнат, а через print никак нельзя вывести?
#!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)
Офлайн