Я упростил свой код для лучшего понимания. вот проблема:
случай 1:
# -*- coding: utf-8 -*-
text = "چرا کار نمیکنی؟" # also using u"...." results the same
print(text)
выход:
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>
случай 2:
text = "چرا کار نمیکنی؟".encode("utf-8")
print(text)
нет выхода.
случай 3:
import sys
text = "چرا کار نمیکنی؟".encode("utf-8")
sys.stdout.buffer.write(text)
выход:
چرا کار نمیکنی؟
Я знаю, что случай 3 работает как-то, но я хочу использовать другие функции, такие как print(), write (str()),....
Я также прочитал документацию python 3 относительно Unicode здесь.
а также прочитать десятки Q & A в stackoverflow.
и здесь - длинная статья, объясняющая проблему и ответ для python 2.X
простой вопрос:
как печатать не-ASCII-символы, такие как фарси или арабский, используя функцию python print()?
update 1: так как многие ребята говорят, что проблема связана с терминалом, который я тестировал:
случай 4:
text = "چرا کار نمیکنی؟" .encode("utf-8")# also using u"...." results the same
print(text)
терминал:
python persian_encoding.py > test.txt
test.txt:
b'\xda\x86\xd8\xb1\xd8\xa7 \xda\xa9\xd8\xa7\xd8\xb1 \xd9\x86\xd9\x85\xdb\x8c\xda\xa9\xd9\x86\xdb\x8c\xd8\x9f'
очень важное обновление:
после некоторого времени, играя вокруг этой проблемы, наконец, я нашел другое обходное решение, чтобы заставить cmd.exe выполнять работу (без необходимости использования сторонних программ, таких как ConEmu или...):
небольшое объяснение сначала:
наша основная проблема не касается Python. это проблема с набором символов командной строки в Windows (для полного объяснения проверьте Arman Answer) поэтому... если вы измените набор символов командной строки Windows на UTF-8 вместо стандартного ascii, тогда Командная строка сможет взаимодействовать с символами UTF-8 (например, с фарси или арабским), это решение не гарантирует хорошего представления (поскольку они будут напечатаны как маленькие квадраты), но это хорошее решение, если вы хотите иметь ввод/вывод файлов в python с символами UTF-8.
Шаги:
перед запуском python из командной строки введите:
chcp 65001
теперь запускайте свой код на Python, как всегда.
python testcode.py
привести к случаю 1:
?????? ??? ??????
он работает без ошибок.
скриншот:
для получения дополнительной информации о том, как установить 65001 в качестве набора символов по умолчанию, .