Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 문자열이 ASCII로만 구성되어 있는지 확인하는 방법

문자열이 오직 ASCII 문자로만 이루어져 있는지 확인하는 가장 직관적인 방법은 문자열의 각 문자를 하나씩 순회하면서, 해당 문자의 유니코드 코드 포인트가 ASCII 범위(0~127) 안에 속하는지 검사하는 것입니다.

방법 1: all() 함수와 ord() 함수 활용하기

def is_ascii(s):
    return all(ord(c) < 128 for c in s)

print(is_ascii('ӓmsterdӓm'))

출력 결과

False

'ӓ'처럼 키릴 계열의 문자는 코드 포인트가 128보다 크기 때문에 위 예제는 False를 반환합니다. 다만 이 방식은 문자 개수만큼 반복 연산을 수행하므로, 문자열이 길어질수록 성능이 크게 저하된다는 단점이 있습니다.

방법 2: 인코딩 예외 처리 활용하기 (권장)

더 효율적인 방법은 문자열을 ASCII로 인코딩해 보고 예외 발생 여부를 확인하는 것입니다. 파이썬 3에서는 str.encode('ascii')를 사용하며, ASCII 범위를 벗어나는 문자가 포함되어 있으면 UnicodeEncodeError가 발생합니다.

mystring = 'ӓmsterdӓm'
try:
    mystring.encode('ascii')
except UnicodeEncodeError:
    print('ASCII 문자열이 아닙니다')
else:
    print('ASCII 문자열입니다')

출력 결과

ASCII 문자열이 아닙니다

참고로 파이썬 2 환경에서는 mystring.decode('ascii')를 호출했을 때 UnicodeDecodeError가 발생하는지 확인하는 방식으로 동일하게 구현할 수 있습니다. 인코딩 검사는 C 레벨에서 내부적으로 처리되기 때문에 파이썬 루프를 직접 도는 첫 번째 방법보다 훨씬 빠릅니다. 따라서 대용량 텍스트를 다루는 실무 환경에서는 두 번째 방법을 사용하는 것이 좋습니다.