Это помогает привести пример, подобный приведенному ниже. Это дает четкое представление о рабочей среде (ОС и версии Python):
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print(unichr(1547))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u060b' in position 0: character maps to <undefined>
Проблема не с преобразованием, но с печатью. В приведенном выше случае консоль Windows использует кодировку cp437
, и это не поддерживает печатаемый символ.
Преобразование работает правильно, c
содержит символ Юникода, и это AFGHANI SIGN
.
>>> c = unichr(1547)
>>> c
u'\u060b'
>>> import unicodedata as ud
>>> ud.name(c)
'AFGHANI SIGN'
Если вы хотите, чтобы правильно напечатать, один из способов заключается в использовании IDE PythonWin
из pywin32
расширений, которые поддерживает UTF-8, закодированный выход:
PythonWin 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32.
Portions Copyright 1994-2008 Mark Hammond - see 'Help/About PythonWin' for further copyright information.
>>> unichr(1547)
u'\u060b'
>>> print(unichr(1547))
؋
Другой должен написать вывод в UTF-8 кодировке файл и открыть результат в блокноте:
with io.open('out.txt','w',encoding='utf8') as f:
f.write(unichr(1547)+unichr(402)+unichr(165))
Выходной файл:
؋ƒ¥