我不想发布这个问题,但几乎尝试了所有的事情,似乎没有任何效果。在python 2.7上
ord(unicode('₹', "utf-8"))
这会产生8377
作为输出。如何从'₹'
获取8377
?
unichr(8377)
和chr(8377)
无效,因为它们会抛出ordinal not in range(128)
例外。
我也尝试了其他的事情,但我认为我的方向是错误的。
答案 0 :(得分:4)
>>> 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)。