Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
898
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
951
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
941
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1725
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4398
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Python, Unicode и консоль Windows
Когда я пытаюсь напечатать строку Unicode в консоли Windows, я получаю ошибку UnicodeEncodeError: 'charmap' codec can't encode character .... . Я предполагаю, что это связано с тем, что консоль Windows не принимает символы только Unicode. Как лучше всего это обойти? Есть ли какой-нибудь способ заставить Python автоматически печатать ? вместо сбоя в этой ситуации?
Редактировать: я использую Python 2.5.
Примечание: @LasseV.Karlsen ответ с галочкой вроде как устарел (с 2008 года). Пожалуйста, используйте solutions/answers/suggestions ниже с осторожностью!!
@JFSebastian ответ более актуален на сегодняшний день (6 января 2016 года).
Update: Python 3.6 реализует PEP 528: измените кодировку консоли Windows на UTF-8 : консоль по умолчанию на Windows теперь будет принимать все символы Unicode. Внутренне он использует тот же Unicode API, что и пакет win-unicode-console , упомянутый ниже . print(unicode_string) должен просто работать сейчас.
Я получаю ошибку
UnicodeEncodeError: 'charmap' codec can't encode character....
Ошибка означает, что Unicode символа, которые вы пытаетесь напечатать, не могут быть представлены с помощью текущей кодировки символов консоли ( chcp). Кодовая страница часто является 8-битной кодировкой, такой как cp437 , которая может представлять только ~0x100 символа из ~1M Unicode символов:
>>> u"\N{EURO SIGN}".encode('cp437')
Traceback (most recent call last):
...
UnicodeEncodeError: 'charmap' codec can't encode character '\u20ac' in position 0:
character maps to
Я предполагаю, что это связано с тем, что консоль Windows не принимает только символы Unicode. Как лучше всего это обойти?
Консоль Windows действительно принимает символы Unicode и даже может отображать их (только BMP), если соответствующий шрифт настроен . WriteConsoleW() API следует использовать так, как предложено в ответе Хопвуда @Daira . Он может быть вызван прозрачно, т. е. вам не нужно и не следует изменять свои скрипты, если вы используете пакет win-unicode-console :
T:\> py -mpip install win-unicode-console
T:\> py -mrun your_script.py
Смотрите, что происходит с Python 3.4, Unicode, разными языками и Windows?
Есть ли какой-нибудь способ, которым я могу сделать Python автоматически напечатать
?вместо сбоя в этой ситуации?
Если в вашем случае достаточно заменить все нескодируемые символы на ? , то вы можете установить PYTHONIOENCODING envvar :
T:\> set PYTHONIOENCODING=:replace
T:\> python3 -c "print(u'[\N{EURO SIGN}]')"
[?]
В Python 3.6+ кодировка, указанная PYTHONIOENCODING envvar, игнорируется для буферов интерактивной консоли, если только PYTHONLEGACYWINDOWSIOENCODING envvar не установлен в непустую строку.
Примечание: этот ответ несколько устарел (с 2008 года). Пожалуйста, используйте нижеприведенное решение с осторожностью!!
Вот страница, на которой подробно описана проблема и ее решение (найдите на странице текстовую оболочку sys.stdout в экземпляр ):
Вот отрывок кода с этой страницы:
$ python -c 'import sys, codecs, locale; print sys.stdout.encoding; \
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout); \
line = u"\u0411\n"; print type(line), len(line); \
sys.stdout.write(line); print line'
UTF-8
<type 'unicode'> 2
Б
Б
$ python -c 'import sys, codecs, locale; print sys.stdout.encoding; \
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout); \
line = u"\u0411\n"; print type(line), len(line); \
sys.stdout.write(line); print line' | cat
None
<type 'unicode'> 2
Б
Б
На этой странице есть еще кое-какая информация, которую стоит прочитать.
Несмотря на другие правдоподобно звучащие ответы, которые предлагают изменить кодовую страницу на 65001, это не работает . (Кроме того, изменение кодировки по умолчанию с помощью sys.setdefaultencoding не является хорошей идеей .)
Смотрите этот вопрос для получения подробной информации и кода, который действительно работает.
Если вы не заинтересованы в получении достоверного представления плохого персонажа(ов), вы можете использовать что-то вроде этого (работа с python >= 2.6, включая 3.x):
from __future__ import print_function
import sys
def safeprint(s):
try:
print(s)
except UnicodeEncodeError:
if sys.version_info >= (3,):
print(s.encode('utf8').decode(sys.stdout.encoding))
else:
print(s.encode('utf8'))
safeprint(u"\N{EM DASH}")
Плохие символы в строке будут преобразованы в представление, которое может быть напечатано консолью Windows.