如何从整数表示中获取单个unicode字符?

时间:2017-02-23 09:49:44

标签: python python-2.7 unicode

我不想发布这个问题,但几乎尝试了所有的事情,似乎没有任何效果。在python 2.7上

ord(unicode('₹', "utf-8"))

这会产生8377作为输出。如何从'₹'获取8377

unichr(8377)chr(8377)无效,因为它们会抛出ordinal not in range(128)例外。 我也尝试了其他的事情,但我认为我的方向是错误的。

1 个答案:

答案 0 :(得分:4)

问题

根据documentation

>>> unichr(8377)
u'\u20b9'

这适用于任何系统上的任何python 2.7。

它完全符合您的要求:它从整数表示中返回单个unicode字符。但是,此unicode字符不会显示为。而是返回一个repr版本,可以使用ascii字符显示。

根据您的终端,print将正确显示字符:

Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> unichr(8377)
u'\u20b9'
>>> print unichr(8377)
₹

或抛出错误(Windows上的PowerShell):

PS C:\Windows\System32\WindowsPowerShell\v1.0> python
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (
Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print unichr(8377)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files (x86)\Python2.7\lib\encodings\cp850.py", line 12, in en
code
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u20b9' in position
 0: character maps to <undefined>
>>>

可能的解决方案

您的终端需要接受unicode字符。

answer可能会对您有所帮助:

import locale
print unichr(8377).encode(locale.getdefaultlocale()[1], 'replace')

根据您的编码,字符可能会正确显示或显示为?

此字符替换称为"tofu""mojibake",并且它不是Python问题。它与底层终端有关(例如Powershell)。

Those threads可能会对您有所帮助。