我想请你帮忙。我必须解码unicode decimal to chars,但我不解码clasisc字母,我正在解码特殊字符,如:؋,лв和一些更多¥,它不起作用 - 它说:'charmap'编解码器无法编码字符。你能帮助我吗?
我必须使用此页面中的所有货币符号:http://www.xe.com/symbols.php,谢谢。
编辑: 例如,我需要从十进制数1547符号“؋”获得。
答案 0 :(得分:2)
有助于提供如下示例。这清楚地表明了操作环境(操作系统和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
包含Unicode字符,它是AFGHANI SIGN
。
>>> c = unichr(1547)
>>> c
u'\u060b'
>>> import unicodedata as ud
>>> ud.name(c)
'AFGHANI SIGN'
如果您希望它正确打印,一种方法是使用支持UTF-8编码输出的PythonWin
扩展中的IDE pywin32
:
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))
输出文件:
؋ƒ¥