1

Пользователь вводит строку на моем веб-сайте. Они вводят символ не-ascii.Функция печати python3 испускает «ascii» кодек не может кодировать ошибку символа

javascript сохраняет свой вход, упаковывает его с помощью JSON.stringify() и отправляет его на сервер.

Сервер, работающий Python3, распаковывает JSON с json.loads и сохраняет эту строку в объект Node, затем запускает линию

print('looks like {}'.format(node_obj)) 

Я получаю ошибку

'ascii' codec can't encode character error '\u2212' in position 941: ordinal not in range(128) 

ПОХОЖЕ, для меня, что функция печати в Python3 пытается преобразовать строку unicode в ascii! (преобразовать в объект байтов с использованием ascii-кодирования?)

Возможно ли, что мой FreeBSD-сервер не поддерживает UTF-8, заставив функцию печати Python выполнить это преобразование? Или, возможно, строка никогда не была должным образом дезинфицирована в первую очередь, и я должен делать это в javascript, когда я впервые получаю ее от пользователя?

Позвольте мне знать, какая дополнительная информация вам полезна.

ответ

2

Что говорит команда locale?

Вы можете использовать Python для использования utf-8 с LANG=en_US.UTF-8 или PYTHONIOENCODING=utf-8.

Установка LANG в среде по умолчанию зависит от платформы: https://unix.stackexchange.com/questions/342817/how-do-i-add-a-language-in-freebsd

+0

% локаль LANG = LC_CTYPE = "C" LC_COLLATE = "C" LC_TIME = "C" LC_NUMERIC = "C" LC_MONETARY = "C" LC_MESSAGES = "C" LC_ALL = – mareoraft

+0

Я думаю, что работает 'export LANG =" en_US.UTF-8 "' работал для меня. Я собираюсь подождать немного, прежде чем принимать ответ, потому что я хочу убедиться, что это правильно. – mareoraft

+0

Да, установка переменной среды LANG для использования UTF-8, в зависимости от того, какой вариант подходит для вашей ОС, является правильным решением. – mareoraft