2017-02-23 69 views
2

Я не хотел публиковать этот вопрос, но пытался почти все, ничего не работает. На Python 2.7Как получить единственный символ Юникода из его целочисленного представления?

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

Это производит 8377 в качестве выхода. Как мне получить '₹' от 8377?

unichr(8377) и chr(8377) не работают, поскольку они бросают ordinal not in range(128) исключение. Я пробовал и другие вещи, но я думаю, что я направляюсь в неправильном направлении.

+0

Если вы получаете эту ошибку, значит, ваша кодировка по умолчанию установлена ​​на 'ascii', вы можете сделать: 'print unichr (8377) .encode ('utf-8')' –

+0

Какой терминал вы используете? –

+0

pydevconsole. 'print unichr (8377)' отлично работает, но если вы делаете 'unichr (8377)', он не дает '' ₹ ''в качестве вывода. Его 'u '\ u20b9'' –

ответ

3

Проблема

Согласно documentation:

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

Это должно работать на любом Python 2.7 на любой системе.

Он выполняет именно то, что вы просили: он возвращает один символ юникода из его целочисленного представления. Однако этот символ Юникода не отображается как . Вместо этого возвращается версия версии, которая может отображаться с символами 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) 
₹ 

или выдаст ошибку (Powershell на Windows):

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).

Thosethreads может вам помочь.

+0

"' unichr (8377) 'и' chr (8377) 'не работают" - и по-прежнему не работают после 'import unicodedata', либо (для меня как минимум). – TigerhawkT3

+0

Ожидается, что 'chr (8377)' не будет работать с Python 2. 'unichr' должен работать, по крайней мере, на всех системах, в которых я его использовал (Win, Linux, Mac Os) с Python 2.7. Какую версию вы используете, на какой системе? –

+0

Я обновил ответ. –