Найти - Пользователи
Полная версия: Проблема с выводом данных на кириллице в Python 3
Начало » Python для новичков » Проблема с выводом данных на кириллице в Python 3
1 2
vadval15
Стандартная тестовая программа для 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 приводит к совершенно противоположным результатам? Буду признателен за любой ответ по данному вопросу.
FishHook
Ну то есть вы перехватили исключение, а теперь у вас вопрос, а что же там было в исключении.
Не перехватывайте, интерпретатор расскажет в чем ошибка
vadval15
Спасибо за ответ. Действительно, без перехватывания исключения интерпретатор в журнале сервера рассказал, в чём ошибка:
 [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
К сожалению, он умолчал о том, как её исправить.
FishHook
 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>")

что выводит?
vadval15
Спасибо за ответ. Данная программа выводит в браузере следующее:
ANSI_X3.4-1968
FishHook
vadval15
Попробуйте установить системную локаль в
LANG=en_US.UTF-8
vadval15
Спасибо за ответ. К сожалению, после смены системной локали (ru_RU.UTF-8 на en_US.UTF-8) всё осталось по-прежнему.
FishHook
vadval15
ru_RU.UTF-8 на en_US.UTF-8
vadval15
ANSI_X3.4-1968
Что-то тут не так
vadval15
Спасибо за ответ. По-моему, тут всё не так, а почему - непонятно.
xam1816
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
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