CGI-скрипт не виводить кирилицю
Корректное отображение UTF8 в CGI-скриптах
Проблема:
Простой скрипт на perl или python, запускаемый, как cgi, некорректно выводят кириллицу (и другие utf символы тоже).
#!/usr/bin/perl
print("Content-Type: text/html\n\n");
print("Привет, МИР!");#!/usr/bin/python3
print("Content-Type: text/html\n")
print("Привет, МИР!")charset=utf-8 в заголовках, decode/encode не помогают. Прописывание кодировок по умолчанию в .htaccess - тоже.
Сгенерированная HTML-страница выводится в кодировке ANSI_X3.4-1968
Скрипт для перевірки:
#!/usr/bin/python3
import sys
print("Content-Type: text/html; charset=utf-8\n")
print("<html><body><pre>LANG: " + sys.stdout.encoding + "</pre>\n")
Решение:
https://stackoverflow.com/questions/9322410/set-encoding-in-python-3-cgi-scripts
1. В файле /etc/apache2/envvars раскоментировать (если закоментирована) строку
2. В конфирурационном файле виртуального хоста в разделе ScriptAlias/Directory прописать строку PassEnv LANG en_US.UTF-8:
3. И теперь, да: в выводимый заголовок Content-Type CGI-скрипта добавлять кодировку utf-8
❗Увага! Якщо скрипти виконуються не лише у директорії cgi-bin, то в інших директоріях зі скриптами слід також розмістити файл .htaccess:
Див. також https://stackoverflow.com/questions/4374455/how-to-set-sys-stdout-encoding-in-python-3
python3.7
https://stackoverflow.com/questions/4374455/how-to-set-sys-stdout-encoding-in-python-3
TODO or DEL
Last updated