파이썬에서 문자열이 ASCII 범위 내에 포함되어 있는지 확인하거나 필터링해야 하는 경우가 종종 있습니다. 예를 들어, 외부 데이터를 처리할 때 한글이나 특수 유니코드 문자가 섞여 있는지 검증해야 할 때 유용합니다.
이때 각 문자의 유니코드 코드 포인트를 구해주는 ord() 함수와 모든 요소가 조건을 만족하는지 검사하는 all() 내장 함수를 함께 사용하면 간단하게 해결할 수 있습니다.
예제 코드
my_string = "Hope you are well"
print("The string is :")
print(my_string)
my_result = all(ord(c) < 128 for c in my_string)
if(my_result == True):
print("The string contains ASCII characters")
else:
print("The string doesn't contain all ASCII characters")실행 결과
The string is : Hope you are well The string contains ASCII characters
코드 설명
먼저 문자열을 정의하고 콘솔에 그대로 출력합니다.
제너레이터 표현식을 통해 문자열의 모든 문자에 대해
ord()함수를 호출하여 해당 문자의 유니코드 값이 128 미만인지 검사합니다. ASCII 문자 집합은 코드 포인트 0~127로 정의되기 때문입니다.all()함수는 모든 조건식이 참일 경우에만 불리언 값True를 반환합니다. 하나라도 128 이상의 값을 가진 문자가 있으면False가 됩니다.반복 검사가 끝나면 결과 불리언 값을
if문으로 확인합니다.검사 결과에 따라 해당하는 메시지를 콘솔에 출력합니다.
추가 팁: str.isascii() 메서드
참고로 파이썬 3.7부터는 str.isascii() 메서드를 제공하므로 위 코드를 더욱 간결하게 작성할 수 있습니다.
my_string = "Hope you are well"
if my_string.isascii():
print("모든 문자가 ASCII 범위 내에 있습니다")
else:
print("ASCII 범위를 벗어난 문자가 포함되어 있습니다")두 방법 모두 동일한 결과를 제공하지만, isascii() 메서드가 내부적으로 최적화되어 있어 더 빠르고 가독성도 뛰어납니다. 다만 ord()>와 all()>을 조합한 방식은 특정 코드 포인트 범위를 직접 지정해야 하는 등 더 세밀한 제어가 필요할 때 유용하게 활용할 수 있습니다.