import locale
prefered_encoding = locale.getpreferredencoding()
prefered_encoding 'ANSI_X3.4-1968'
używam ramy nazwie inginious i to przy użyciu web.py aby uczynić swój szablon.domyślny python3 kodowania UnicodeDecodeError ASCII za pomocą apache WSGI
web.template.render(os.path.join(root_path, dir_path),
globals=self._template_globals,
base=layout_path)
rendering działa na moim localhost ale nie na moim serwerze pomostowym.
Oba wywołują python3. Widzę, że web.py wymusza utf-8
na
kodowanie w python2 tylko (to z moich rąk)
def __str__(self):
self._prepare_body()
if PY2:
return self["__body__"].encode('utf-8')
else:
return self["__body__"]
tutaj jest ślad stosu
t = self._template(name),
File "/lib/python3.5/site-packages/web/template.py", line 1028, in _template,
self._cache[name] = self._load_template(name),
File "/lib/python3.5/site-packages/web/template.py", line 1016, in _load_template
return Template(open(path).read(), filename=path, **self._keywords)
File "/lib64/python3.5/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 83: ordinal not in range(128),
Moje html zawierają hebew znaki , mały przykład
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title feedback-modal-title">
חישוב האיברים הראשונים בסדרה של איבר ראשון חיובי ויחס שלילי:
<span class="red-text">אי הצלחה</span>
i otwórz go tak:
open('/path/to/feedback.html').read()
i linia, w której kodowanie nie powiedzie się, to miejsce, w którym znajdują się znaki hebrajskie.
Próbowałem ustawić zmienne środowiska w ~/.bashrc
:
export PYTHONIOENCODING=utf8
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
pod użytkownikiem centos
Pomysłowy ramy jest zainstalowany jako pip
pod python3.5 site-packages. i jest obsługiwany przez serwer apache pod użytkownikiem apache
próbowano ustawienie zmiennych środowiskowych w kodzie (podczas init app), tak że WSGI apache będzie wiedział o nich
import os
os.environ['LC_ALL'] = 'en_US.UTF-8'
os.environ['LANG'] = 'en_US.UTF-8'
os.environ['LANGUAGE'] = 'en_US.UTF-8'
mam redagował /etc/httpd/conf/httpd.conf
stosując metodę setenv:
SetEnv LC_ALL en_US.UTF-8
SetEnv LANG en_US.UTF-8
SetEnv LANGUAGE en_US.UTF-8
SetEnv PYTHONIOENCODING utf8
i ponownie używając sudo service httpd restart
i nadal nie ma szczęścia.
Moje pytanie brzmi: jaka jest najlepsza praktyka, aby rozwiązać ten problem. Rozumiem, że są na to hacki, ale chcę zrozumieć, co jest przyczyną podrzędną, a także jak ją rozwiązać.
Dzięki!
'ANSI_X3.4-1968' ==' ASCII'. –
Musisz nam dokładnie pokazać, czym jest traceback i jak go odtworzyć. –
Dodałem stacktrace i trochę więcej kodu, ale aby odtworzyć, musisz zainstalować nieistotną frameworku, co nie jest prawidłową sugestią, więc moją najlepszą opcją jest opisanie pytania dobrze – WebQube