Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 18, 2010 11:34:39

yusi4ka
От:
Зарегистрирован: 2010-01-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Русские символы в браузере

Добрый день, я только начала разбираться с питоном, поэтому задам очень тупой вопрос.
Пытаюсь запустить элементарный питоновский скрипт(всеми любимый “Hello world”) в браузере, только на русском языке. Если нет ни одного русского символа, то все ок, если есть хоть один русский символ, то возвращается пустая страница. В IDLE тоже все нормально выводится. Помогите, плиз
P.s. У меня питон 3.1 и apache 2.2.



Офлайн

#2 Янв. 18, 2010 17:12:34

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Русские символы в браузере

а “запустить в браузере” - это через CGI? И работает все на Винде или Линуксе/МакОси?



Офлайн

#3 Янв. 18, 2010 20:54:21

yusi4ka
От:
Зарегистрирован: 2010-01-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Русские символы в браузере

Ага, через СGI. У меня Линукс ( Ubuntu 9.10)



Офлайн

#4 Янв. 19, 2010 04:41:28

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Русские символы в браузере

Питон должен выводить в utf-8.
Какую кодировку подставляет apache для CGI по умолчанию - вам виднее.
Кстати, страница точно пустая? Т.е. если curl/wget попросить ее затянуть - тоже ничего не показывает? Тогда смотрите логи апача - CGI слетел по ошибке.



Офлайн

#5 Янв. 19, 2010 21:56:42

yusi4ka
От:
Зарегистрирован: 2010-01-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Русские символы в браузере

Добавляла я и defaultcharset в конфиге апача, но не помогло, в логе тоже было пусто. Нашла на одной форуме вот это
print = lambda s: sys.stdout.buffer.write(s.encode('utf-8')), теперь выводится, но все равно как-то неправильно.
Андрей, спасибо за помощь



Офлайн

#6 Янв. 20, 2010 00:25:05

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Русские символы в браузере

А что лежит в sys.stdout.encoding?



Офлайн

#7 Янв. 20, 2010 09:37:41

yusi4ka
От:
Зарегистрирован: 2010-01-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Русские символы в браузере

в браузере -ANSI_X3.4-1968
в интерпретаторе и среде разработки - utf-8



Офлайн

#8 Янв. 20, 2010 10:35:39

expee
От:
Зарегистрирован: 2009-12-21
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Русские символы в браузере

Я тебе в ПМ писал, посмотри. Я думаю, что дело вообще не в python, т.к. должно все работать. Попробуй поменять кодировки в браузере (в firefox - view-character encoding), т.к. он сам не определит utf8. Есть ли тег meta с указанием кодировки?



Офлайн

#9 Март 11, 2011 12:59:03

zloymih
От:
Зарегистрирован: 2011-03-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Русские символы в браузере

У меня похожая проблема. Имеем 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 и перезапускал апач. Очень хочу разобраться. Прошу помощи.



Офлайн

#10 Март 11, 2011 14:20:12

zloymih
От:
Зарегистрирован: 2011-03-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Русские символы в браузере

Решение:

#!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()



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version