1038
A partir daqui :
A função ord () obteria o valor int do char. E caso você queira converter novamente depois de jogar com o número, a função chr () faz o truque.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
No Python 2, há também a unichr
função, retornando o caractere Unicode cujo ordinal é o unichr
argumento:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
No Python 3 você pode usar em chr
vez de unichr
.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'
,. No Python 3 (ouunichr
no Python 2), o número de entrada é interpretado como ordinal inteiro do ponto de código Unicode:unichr(0x439) == '\u0439'
(os primeiros 256 números inteiros têm o mesmo mapeamento que latin-1unichr(0xe9) == b'\xe9'.decode('latin-1')
:, os primeiros 128 - ascii:unichr(0x0a) == b'\x0a'.decode('ascii')
é uma coisa Unicode, não Pitão).Observe que
ord()
não fornece o valor ASCII em si; fornece o valor numérico do caractere em qualquer codificação em que esteja. Portanto, o resultado deord('ä')
pode ser 228 se você estiver usando o Latin-1 ou pode aumentar umTypeError
se estiver usando o UTF-8. Pode até retornar o ponto de código Unicode, se você passar um unicode:fonte
unicode
por padrão. Python3 ( bytes ):str(b'\xc3\x9c', 'ascii')
-> gera UnicodeDecodeError . Python3 ( bytes ):str(b'\xc3\x9c', 'utf-8')
-> retorna Ü . Você também pode olhar para o pacote de seis .Você está procurando:
fonte
A resposta aceita está correta, mas há uma maneira mais inteligente / eficiente de fazer isso se você precisar converter um monte de caracteres ASCII em seus códigos ASCII de uma só vez. Em vez de fazer:
ou um pouco mais rápido:
você converte em tipos nativos do Python que iteram os códigos diretamente. No Python 3, é trivial:
e no Python 2.6 / 2.7, é apenas um pouco mais envolvido porque não possui um
bytes
objeto de estilo Py3 (bytes
é um alias parastr
, que itera por caractere), mas eles têmbytearray
:Codificar como um tipo que itera nativamente por ordinal significa que a conversão é muito mais rápida; em testes locais tanto no Py2.7 quanto no Py3.5, a iteração de
str
para obter seus códigos ASCIImap(ord, mystr)
começa demorando cerca de duas vezes mais para umlen
10 dostr
quebytearray(mystr)
no Py2 oumystr.encode('ascii')
no Py3 e, à medida questr
aumenta, o multiplicador pagomap(ord, mystr)
aumenta para ~ 6,5x-7x.A única desvantagem é que a conversão é toda de uma só vez; portanto, seu primeiro resultado pode demorar um pouco mais, e um enorme enorme
str
terá um temporário proporcionalmente grandebytes
/bytearray
, mas, a menos que isso o force a se debater na página, é provável que isso não importe. .fonte
Para obter o código ASCII de um caractere, você pode usar o
ord()
funçãoAqui está um código de exemplo:
Resultado:
fonte