Уведомления

Группа в Telegram: @pythonsu

#1 Июль 15, 2020 13:58:55

vadval15
Зарегистрирован: 2019-08-11
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с выводом данных на кириллице в Python 3

Стандартная тестовая программа для Python 2.7.11 в ОС Linux:

 #!/usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fileencoding=utf-8
import cgitb
cgitb.enable()
print "Content-type: text/html;charset=utf-8\n\n"
print "<html><head><title>Python test</title></head><body>"
try:
    print "<h1>Прощай, Мир!</h1>"
except:
    print "<h1>No - Goodbye, World!</h1>"
print "</body></html>"
выводит с помощью функции print в браузере то, что и должна выводить:
Прощай, Мир!
Аналогичная программа для Python 3.7.3:
 #!/usr/bin/env python3
# -*- coding: utf-8 -*-
# vim:fileencoding=utf-8
import cgitb
cgitb.enable()
print("Content-type: text/html;charset=utf-8\n\n")
print("<html><head><title>Python test</title></head><body>")
try:
    print("<h1>Прощай, Мир!</h1>")
except:
    print("<h1>No - Goodbye, World!</h1>")
print("</body></html>")
обрабатывает исключение в виде строки на кириллице и выводит в браузере:
No - Goodbye, World!
Почему же выполнение двух по сути одинаковых программ в разных версиях Python приводит к совершенно противоположным результатам? Буду признателен за любой ответ по данному вопросу.

Отредактировано vadval15 (Июль 15, 2020 13:59:38)

Офлайн

#2 Июль 15, 2020 14:43:35

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема с выводом данных на кириллице в Python 3

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



Офлайн

#3 Июль 15, 2020 16:29:55

vadval15
Зарегистрирован: 2019-08-11
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с выводом данных на кириллице в Python 3

Спасибо за ответ. Действительно, без перехватывания исключения интерпретатор в журнале сервера рассказал, в чём ошибка:

 [Wed Jul 15 16:11:57.985452 2020] [cgi:error] [pid 1217:tid 3053452096] [client 93.75.67.126:53312] AH01215: : /var/www/apache2/cgi-bin/hello1r.py
[Wed Jul 15 16:11:57.985533 2020] [cgi:error] [pid 1217:tid 3053452096] [client 93.75.67.126:53312] AH01215: Original exception was:: /var/www/apache2/cgi-bin/hello1r.py
[Wed Jul 15 16:11:57.985589 2020] [cgi:error] [pid 1217:tid 3053452096] [client 93.75.67.126:53312] AH01215: Traceback (most recent call last):: /var/www/apache2/cgi-bin/hello1r.py
[Wed Jul 15 16:11:57.985685 2020] [cgi:error] [pid 1217:tid 3053452096] [client 93.75.67.126:53312] AH01215:   File "/var/www/apache2/cgi-bin/hello1r.py", line 10, in <module>: /var/www/apache2/cgi-bin/hello1r.py
[Wed Jul 15 16:11:57.985797 2020] [cgi:error] [pid 1217:tid 3053452096] [client 93.75.67.126:53312] AH01215:     print("<h1>\\u041f\\u0440\\u043e\\u0449\\u0430\\u0439, \\u041c\\u0438\\u0440!</h1>"): /var/www/apache2/cgi-bin/hello1r.py
[Wed Jul 15 16:11:57.985937 2020] [cgi:error] [pid 1217:tid 3053452096] [client 93.75.67.126:53312] AH01215: UnicodeEncodeError: 'ascii' codec can't encode characters in position 4-9: ordinal not in range(128): /var/www/apache2/cgi-bin/hello1r.py
К сожалению, он умолчал о том, как её исправить.

Офлайн

#4 Июль 15, 2020 16:45:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема с выводом данных на кириллице в Python 3

 import cgitb
import sys
cgitb.enable()
print("Content-type: text/html;charset=utf-8\n\n")
print("<html><head><title>Python test</title></head><body>")
print("<h1>{}</h1>".format(sys.stdout.encoding))
print("</body></html>")

что выводит?



Офлайн

#5 Июль 16, 2020 01:30:41

vadval15
Зарегистрирован: 2019-08-11
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с выводом данных на кириллице в Python 3

Спасибо за ответ. Данная программа выводит в браузере следующее:
ANSI_X3.4-1968

Офлайн

#6 Июль 16, 2020 10:16:29

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема с выводом данных на кириллице в Python 3

vadval15
Попробуйте установить системную локаль в

LANG=en_US.UTF-8



Офлайн

#7 Июль 16, 2020 14:40:48

vadval15
Зарегистрирован: 2019-08-11
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с выводом данных на кириллице в Python 3

Спасибо за ответ. К сожалению, после смены системной локали (ru_RU.UTF-8 на en_US.UTF-8) всё осталось по-прежнему.

Офлайн

#8 Июль 16, 2020 19:12:49

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема с выводом данных на кириллице в Python 3

vadval15
ru_RU.UTF-8 на en_US.UTF-8
vadval15
ANSI_X3.4-1968
Что-то тут не так



Офлайн

#9 Июль 17, 2020 01:53:27

vadval15
Зарегистрирован: 2019-08-11
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с выводом данных на кириллице в Python 3

Спасибо за ответ. По-моему, тут всё не так, а почему - непонятно.

Офлайн

#10 Июль 17, 2020 13:08:20

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1395
Репутация: +  124  -
Профиль   Отправить e-mail  

Проблема с выводом данных на кириллице в Python 3

vadval15
print(“<h1>\\u041f\\u0440\\u043e\\u0449\\u0430\\u0439, \\u041c\\u0438\\u0440!</h1>”)

почему экранируется \u ?

если убрать экран

 print("\u041f\u0440\u043e\u0449\u0430\u0439, \u041c\u0438\u0440!")
выведет

 D:\programming\untitled2\venv\Scripts\python.exe D:/programming/untitled2/test.py
Прощай, Мир!
Process finished with exit code 0

различия в print и print()?

а если убрать
 # -*- coding: utf-8 -*-
# vim:fileencoding=utf-8

Отредактировано xam1816 (Июль 17, 2020 18:15:31)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version