yusi4ka
Янв. 18, 2010 11:34:39
Добрый день, я только начала разбираться с питоном, поэтому задам очень тупой вопрос.
Пытаюсь запустить элементарный питоновский скрипт(всеми любимый “Hello world”) в браузере, только на русском языке. Если нет ни одного русского символа, то все ок, если есть хоть один русский символ, то возвращается пустая страница. В IDLE тоже все нормально выводится. Помогите, плиз
P.s. У меня питон 3.1 и apache 2.2.
Андрей Светлов
Янв. 18, 2010 17:12:34
а “запустить в браузере” - это через CGI? И работает все на Винде или Линуксе/МакОси?
yusi4ka
Янв. 18, 2010 20:54:21
Ага, через СGI. У меня Линукс ( Ubuntu 9.10)
Андрей Светлов
Янв. 19, 2010 04:41:28
Питон должен выводить в utf-8.
Какую кодировку подставляет apache для CGI по умолчанию - вам виднее.
Кстати, страница точно пустая? Т.е. если curl/wget попросить ее затянуть - тоже ничего не показывает? Тогда смотрите логи апача - CGI слетел по ошибке.
yusi4ka
Янв. 19, 2010 21:56:42
Добавляла я и defaultcharset в конфиге апача, но не помогло, в логе тоже было пусто. Нашла на одной форуме вот это
print = lambda s: sys.stdout.buffer.write(s.encode('utf-8')), теперь выводится, но все равно как-то неправильно.
Андрей, спасибо за помощь
Андрей Светлов
Янв. 20, 2010 00:25:05
А что лежит в sys.stdout.encoding?
yusi4ka
Янв. 20, 2010 09:37:41
в браузере -ANSI_X3.4-1968
в интерпретаторе и среде разработки - utf-8
expee
Янв. 20, 2010 10:35:39
Я тебе в ПМ писал, посмотри. Я думаю, что дело вообще не в python, т.к. должно все работать. Попробуй поменять кодировки в браузере (в firefox - view-character encoding), т.к. он сам не определит utf8. Есть ли тег meta с указанием кодировки?
zloymih
Март 11, 2011 12:59:03
У меня похожая проблема. Имеем Windows XP, Apache 2.2 и Python 3.2
На питоне написан простенький cgi скрипт вот он:
#!C:/Python32/python.exe
import sqlite3
import cgitb
cgitb.enable()
print("Content-Type: text/html; charset = utf-8") # HTML is following
print() # blank line, end of headers
print('русские буквы<br>')
conn = sqlite3.connect(":memory:")
c = conn.cursor()
c.execute('create table foo (zoo text)')
c.execute('''insert into foo values ('Кот')''')
c.execute('''insert into foo values ('Пес')''')
c.execute('''insert into foo values ('Черепаха')''')
conn.commit()
c.execute('select zoo from foo')
for row in c:
print(row[0])
conn.close()
Проблема в том, что на выходе я получаю знаки вопроса - какая-то проблема с кодировкой.
В браузере кодировка выставлена utf-8 (хотя если выбрать windows-1251, то текст отображается нормально). Сам скрипт сохранен в формате utf-8. В заголовке “Content-Type: text/html; charset = utf-8” тоже utf-8. В файле httpd.conf добавил AddDefaultCharset utf-8 и перезапускал апач. Очень хочу разобраться. Прошу помощи.
zloymih
Март 11, 2011 14:20:12
Решение:
#!C:/Python32/python.exe
import sqlite3
import cgitb
cgitb.enable()
print("Content-Type: text/html; charset = utf-8") # HTML is following
print() # blank line, end of headers
print('русские буквы<br>'.encode('utf-8').decode('windows-1251'))
conn = sqlite3.connect(":memory:")
c = conn.cursor()
c.execute('create table foo (zoo text)')
c.execute('''insert into foo values ('Кот')''')
c.execute('''insert into foo values ('Пес')''')
c.execute('''insert into foo values ('Черепаха')''')
conn.commit()
c.execute('select zoo from foo')
for row in c:
print(row[0].encode('utf-8').decode('windows-1251'))
conn.close()