답변:
에서 여기 :
ord () 함수는 char의 int 값을 얻습니다. 그리고 숫자로 재생 한 후 다시 변환하려면 함수 chr ()이 트릭을 수행합니다.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
Python 2에는 서 수가 인수 인 유니 코드 문자를 unichr
반환하는 함수 도 있습니다 .unichr
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
파이썬 3에서는 chr
대신 사용할 수 있습니다 unichr
.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'
. Python 3 (또는 unichr
Python 2)에서 입력 번호는 유니 코드 코드 포인트 정수 서수로 해석됩니다 unichr(0x439) == '\u0439'
(첫 번째 256 정수는 latin-1 :과 동일한 매핑을 갖습니다 unichr(0xe9) == b'\xe9'.decode('latin-1')
. 첫 번째 128-ascii : unichr(0x0a) == b'\x0a'.decode('ascii')
유니 코드가 아닙니다. 파이썬).
주 ord()
당신에게 그 자체로 ASCII 값을 제공하지 않습니다; 어떤 인코딩이든 문자의 숫자 값을 제공합니다. 따라서 ord('ä')
Latin-1을 사용하는 경우 결과는 228이 될 수 있고 TypeError
UTF-8을 사용 하는 경우 에는 결과가 발생할 수 있습니다 . 유니 코드를 전달하면 유니 코드 코드 포인트를 대신 반환 할 수도 있습니다.
>>> ord(u'あ')
12354
허용되는 대답은 정확하지만 전체 ASCII 문자를 한 번에 ASCII 코드로 변환해야하는 경우 더 영리하고 효율적인 방법이 있습니다. 대신에 :
for ch in mystr:
code = ord(ch)
또는 약간 더 빠릅니다.
for code in map(ord, mystr):
코드를 직접 반복하는 Python 기본 유형으로 변환합니다. 파이썬 3에서는 사소합니다.
for code in mystr.encode('ascii'):
파이썬 2.6 / 2.7에서는 Py3 스타일 bytes
객체 가 없기 때문에 약간 더 관련 bytes
이 str
있지만 문자별로 반복되는 별칭입니다 bytearray
.
# If mystr is definitely str, not unicode
for code in bytearray(mystr):
# If mystr could be either str or unicode
for code in bytearray(mystr, 'ascii'):
서수에 의해 기본적으로 반복되는 유형으로 인코딩하면 변환이 훨씬 빨라집니다. Py2.7 및 Py3.5 모두 로컬 테스트, A는 반복에서 str
의 ASCII 코드를 사용하여 얻을 map(ord, mystr)
A의 두 배 정도 오래 걸리는 떨어져 시작 len
10 str
사용하는 것보다 bytearray(mystr)
Py2 또는 mystr.encode('ascii')
Py3에와 같이 str
더 이상 얻을, 승수는 지불 map(ord, mystr)
상승 ~ 6.5x-7x까지
유일한 단점은 전환이 한 번에 이루어지기 때문에 첫 번째 결과가 조금 더 오래 걸릴 수 있으며 실제로 엄청난 str
양의 일시적인 bytes
/ bytearray
가있을 수 있지만 이것이 페이지 스레 싱을 강요하지 않는 한, 이것은 중요하지 않습니다 .