Найти - Пользователи
Полная версия: Проблемы с кодировкой при выводе через Apache
Начало » Web » Проблемы с кодировкой при выводе через Apache
1 2
reload
Имею:
Debian Linux 2.6.26-2-686
Python 3.1.3
Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny9 with Suhosin-Patch mod_python/3.3.1 Python/2.5.2 mod_perl/2.0.4 Perl/v5.10.0

Для проверки работы питона написал простой скрипт index.py:

#!/usr/bin/env python3.1
# -*- coding: utf-8 -*-

print ('Content-type: text/html; charset=UTF-8\n\n')
u = 'Привет!'
print (u)
При запуске в консоли все выводится нормально.

При попытке запуска через апач в логах апача выводится ошибка:

 Traceback (most recent call last):
File "/usr/local/www/adsl/index.py", line 29, in <module>
print (u)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
P.S. Извиняюсь за поднятие столь избитой темы с кодировками, но гугл не помог и на этом форуме я не смог найти ответ на этот вопрос.
bigdick
А если в конфиг апача добавить
AddDefaultCharset UTF-8
reload
bigdick
А если в конфиг апача добавить
AddDefaultCharset UTF-8
Добавил вот так:

        <Directory /usr/local/www/adsl>
Options +ExecCGI
AddHandler cgi-script .py
AddDefaultCharset UTF-8
AllowOverride None
Order deny,allow
Deny from all
allow from 192.168.0.168
</Directory>
Появляется та же самая ошибка.
reload
Ничего дополнительного типа Django ставить не хотелось бы. А примеры в коментариях не помогают.
o7412369815963
подключи через wsgi. он в питоне по дефолту есть.
victor_kr
А если так попробовать:

u = u'Привет!'
reload
victor_kr
А если так попробовать:

u = u'Привет!'
Уже пробовал. Результат:

   File "/usr/local/www/adsl/index.py", line 28
u = u'\\u041f\\u0440\\u0438\\u0432\\u0435\\u0442!'
^
SyntaxError: invalid syntax
Premature end of script headers: index.py
Александр Кошелев
Это третий питон. Там по дефолту строки это уникод объекты. Попробуйте добавить перед строковым литералом символ b.

Ну и вообще конечно с внешним миром надо общаться в какой-то кодировке, поэтому все строки надо так или иначе кодировать.
reload
Александр Кошелев
Это третий питон. Там по дефолту строки это уникод объекты. Попробуйте добавить перед строковым литералом символ b.
Добавил:
  File "/usr/local/www/adsl/index.py", line 28
u = b'\\u041f\\u0440\\u0438\\u0432\\u0435\\u0442!'
SyntaxError: bytes can only contain ASCII literal characters.
Premature end of script headers: index.py
Александр Кошелев
Ну и вообще конечно с внешним миром надо общаться в какой-то кодировке, поэтому все строки надо так или иначе кодировать.
А это можно пояснить?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB