zencd
@zencd

Python 3 + Flask: charmap codec can't encode character?

У удалённого клиента работает веб-сервер на Flask, и при попытке распечатать юникод в stdout случается такая ошибка - падает на символе 'Ł' и ему подобным:

File "C:\project\utils\mycode.py", line 260, in myfunk
    print("- [%s]" % text)
  File "C:\Python\Python36-32\lib\encodings\cp1251.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\xe4' in position 32:
   character maps to <undefined>


Всё бы ничего, но воспроизвести ошибку у себя на аналогичной конфигурации мне не удаётся.

Прошу помощи в победе над проблемой.

Сервер запускается через такой batch, отдельным окном "cmd.exe":

chcp 65001
set FLASK_DEBUG=1
set FLASK_APP=backend.py
venv\scripts\flask.exe run --port 5000


При этом, что странно, простейшая проверка у клиента проходит успешно:

from pprint import pprint
import sys
print(sys.version)
pprint('\u0141') # char 'Ł'


Вывод:

3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]
'Ł'


Возможно это связано с тем что flask-сервер запускается своим экзешником.

Windows 7, Python 3.6
  • Вопрос задан
  • 1166 просмотров
Решения вопроса 1
zencd
@zencd Автор вопроса
Забыл про ещё одну магию... Вот это работает, если добавить в bat-файл:

set PYTHONIOENCODING=UTF-8
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы