문자의 ASCII 값을 얻는 방법


답변:


1346

에서 여기 :

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.


ord ()-Python 3.6.5rc1 문서

ord ()-Python 2.7.14 문서


chr에서 어떤 인코딩을 사용합니까?
njzk2

15
chr은 파이썬 3에서도 unichr 역할을합니다. chr(31415) -> '窷'
William

6
@ njzk2 : 파이썬 2에서는 바이트 문자열을 반환하는 문자 인코딩을 사용하지 않습니다 chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. Python 3 (또는 unichrPython 2)에서 입력 번호는 유니 코드 코드 포인트 정수 서수로 해석됩니다 unichr(0x439) == '\u0439'(첫 번째 256 정수는 latin-1 :과 동일한 매핑을 갖습니다 unichr(0xe9) == b'\xe9'.decode('latin-1'). 첫 번째 128-ascii : unichr(0x0a) == b'\x0a'.decode('ascii')유니 코드가 아닙니다. 파이썬).
jfs

4
왜 함수가 "ord"라고 불리는가?
eLymar

6
@eLymar : 그것은 "순서"와 유사한 언어의 뿌리를 가지고있는 "순서"에 대한 짧은입니다 - 즉, 숫자가 아닌 문자의 기호 표현
야곱 크롤

166

ord()당신에게 그 자체로 ASCII 값을 제공하지 않습니다; 어떤 인코딩이든 문자의 숫자 값을 제공합니다. 따라서 ord('ä')Latin-1을 사용하는 경우 결과는 228이 될 수 있고 TypeErrorUTF-8을 사용 하는 경우 에는 결과가 발생할 수 있습니다 . 유니 코드를 전달하면 유니 코드 코드 포인트를 대신 반환 할 수도 있습니다.

>>> ord(u'あ')
12354

15
주어진 상황에서 어떤 인코딩을 사용하고 있는지 어떻게 알 수 있습니까?
Mustache

1
@Moustache : Python3에서는 유니 코드를 기본적으로 사용합니다.
tricasse

객체 유형 에 따라 다릅니다 . Python3 ( str ) : unicode기본적으로 Python3 ( 바이트 ) : str(b'\xc3\x9c', 'ascii')-> UnicodeDecodeError를 발생 시킵니다. Python3 ( 바이트 ) : str(b'\xc3\x9c', 'utf-8')->는 Ü을 반환합니다 . 6 개의 패키지를 살펴볼 수도 있습니다 .
nosahama


36

허용되는 대답은 정확하지만 전체 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객체 가 없기 때문에 약간 더 관련 bytesstr있지만 문자별로 반복되는 별칭입니다 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의 두 배 정도 오래 걸리는 떨어져 시작 len10 str사용하는 것보다 bytearray(mystr)Py2 또는 mystr.encode('ascii')Py3에와 같이 str더 이상 얻을, 승수는 지불 map(ord, mystr)상승 ~ 6.5x-7x까지

유일한 단점은 전환이 한 번에 이루어지기 때문에 첫 번째 결과가 조금 더 오래 걸릴 수 있으며 실제로 엄청난 str양의 일시적인 bytes/ bytearray가있을 수 있지만 이것이 페이지 스레 싱을 강요하지 않는 한, 이것은 중요하지 않습니다 .


3

문자의 ASCII 코드를 얻으려면 ord()함수를 사용할 수 있습니다 .

예제 코드는 다음과 같습니다.

value = input("Your value here: ")
list=[ord(ch) for ch in value]
print(list)

산출:

Your value here: qwerty
[113, 119, 101, 114, 116, 121]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.