본문 바로가기
Python

파이썬 유니코드의 코드 포인트를 확인하는 ord() 함수의 개념과 활용

by 산코디 2024. 5. 25.

파이썬과 같은 언어를 다루다 보면 유니코드를 알아야 하는 경우가 있다. 컴퓨터를 다루는 작업에 유니코드는 빼놓을 수 없는 부분이기 때문에 이렇게 함수를 통해서 정리해보려고 한다. 그중에서 오늘은 파이썬의 ord() 함수를 살펴보고자 한다. ord() 함수는 문자의 유니코드 코드 포인트를 반환시켜 주는 내장 함수다.
ord() 함수는 어떤 특징과 활용 사례가 있는지 살펴보자.



유니코드 (Unicode)
유니코드는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 표준 문자 인코딩 시스템이다.
이를 통해 다양한 언어의 문자와 기호를 하나의 통일된 방식으로 다룰 수 있으며, 각 문자에는 고유한 코드 포인트가 할당되어 있다.




ord() 함수의 개념

파이썬의 ord() 함수는 지정된 문자를 해당하는 유니코드의 코드 포인트의 정수 값으로 반환하는 내장 함수다.

예를 들어, 문자 A의 유니코드 코드 포인트는 65이며, ord() 함수를 통해서 확인할 수 있다.

print(ord('A'))  
# 출력: 65


ord() 함수는 주로 문자열 처리 및 유니코드 관련된 작업에서 사용된다. 문자열 내에서 특정 문자의 유니코드 코드 포인트를 확인하거나, 문자열을 유니코드 코드 포인트 순서로 정렬하는 등 활용이 가능하다.


정수 값 반환
ord() 함수는 주어진 문자의 유니코드 코드 포인트의 정수 값을 반환한다.

유니코드 코드 포인트
문자의 유니코드 코드 포인트를 반환하여 문자의 순서를 나타낸다.

유니코드 호환
다양한 문자열에서 사용되는 문자를 유니코드 코드 포인트로 변환하여 다룰 수 있다.

문자열 비교
문자열 내에서 특정 문자의 유네코드 코드 포인트의 순서를 비교하여 문자열을 정렬하거나 비교할 때 유용하다.


정리한 바와 같이 ord() 함수는 파이썬에서 유니코드 문자열을 다룰 때 유용하다.




ord() 함수의 활용

그렇다면 ord() 함수를 통해서 실제 어떤 상황에서 활용이 가능한지 다양한 예제를 통해 살펴보자.


문자열 정렬

words = ['apple', 'banana', 'grape', 'orange']
sorted_words = sorted(words, key=lambda x: ord(x[0]))

print("Sorted words:", sorted_words)  
# 출력: Sorted words: ['apple', 'banana', 'grape', 'orange']

위와 같이 과일 이름으로 구성된 배열이 있을 때, 각 요소의 유니코드 코드 포인트 값을 이용해 정렬이 가능하다.
정렬을 위해 sotred() 함수와 lambda를 활용하였고, lambda 처리 시 각 요소마다 ord(x[0])와 같이 유니코드를 호출하고 있고, 문자열의 첫 번째 문자를 기준으로 유니코드를 획인하고 있다. 그 결과 알파뱃 순서(해당 알파뱃의 유니코드 코드 포인트)대로 정렬되는 것을 확인할 수 있다.


문자열의 각 문자 유니코드

text = "Hello"
code_points = [ord(char) for char in text]

print("Code points of 'Hello':", code_points)  
# 출력: Code points of 'Hello': [72, 101, 108, 108, 111]

위의 코드는 “Hello"라는 문자열을 기준으로 순회하면서 각 문자가 가지고 있는 유니코드 코드 포인트를 확인하는 예제다. 리스트 컴프리헨션 방식을 사용하여 간단하게 각 요소별로 ord() 함수를 사용하여 해당 유니코드를 배열로 반환할 수 있다.
그 결과 마지막 주석 내용과 같이 각 요소의 유니코드 코드 포인트 값이 생성된 것을 확인할 수 있다.


문자열 비교

def compare_strings(str1, str2):
    return ord(str1[0]) - ord(str2[0])

string1 = 'banana'
string2 = 'apple'
result = compare_strings(string1, string2)

if result < 0:
    print(f"{string1} comes before {string2} based on the first character.")
elif result > 0:
    print(f"{string1} comes after {string2} based on the first character.")
else:
    print(f"{string1} and {string2} have the same first character.")

위의 코드는 문자열의 유니코드를 기준으로 문자열 비교하는 예제 코드다. 먼저 문자열의 첫 요소를 유니코드 코드 포인트를 기준으로 비교하는 compare_strings() 함수를 정의하였다. 비교 대상의 두 값을 매개변수로 받고 있으며, 두 값을 비교한 후의 결괏값을 반환하고 있다.
그다음은 비교 대상이 되는 두 문자열을 기준으로 compare_strings() 함수를 호출하여 비교한다.
그 후 반환된 결괏값으로 조건을 통해 값에 해당하는 print를 출력하게 된다.



ord() 함수의 범위

ord() 함수는 파이썬에서 지원되는 모든 유니코드 문자열을 다룰 수 있다. ASCII 문자뿐만 아니라 다양한 언어의 문자 imoji, 특수 기호 등을 포함한다.

처음 언급한 것과 같이 유니코드는 전 세계의 모든 문자를 표현하기 위한 국제 표준이며, 현재까지 다양한 언어와 문자체계를 포함하고 있다. ord() 함수는 유니코드 표준에 따라 모든 문자에 대한 고유한 코드 포인트를 반환할 수 있다.

유니코드의 코드 포인트는 0부터 1114111(0x10FFFF)까지의 범위에 있다. 이 범위 내의 각 코드 포인트는 고유한 문자를 나타낸다. 따라서 ord() 함수는 0부터 1114111 사이의 정수를 반환하며, 이 정수는 해당하는 유니코드 문자의 코드 포인트를 나타낸다.

파이썬 3.x 버전에서는 ord() 함수를 사용하여 이러한 모든 유니코드 문자의 코드 포인트를 얻을 수 있으며, 파이썬에서 유니코드 문자를 다루는 데 매우 유용한 기능이다.




ord() 함수 사용 시 주의사항

ord() 함수는 문자의 유니코드를 조회하는 데 매우 유용한 기능이지만, 주의사항에 대해서 숙지하고 사용하는 것이 좋다.


유효 문자
ord() 함수는 유효한 문자에 대해 서만 작동하는데, 유효하지 않은 문자나 문자열을 전달하면 TypeError가 발생할 수 있다.

코드 포인트 범위
ord() 함수는 유니코드의 코드 포인트를 반환하며, 이 코드 포인트의 범위는 0부터 1114111 까지인데, 이 범위를 벗어나는 코드 포인트를 전달하게 되면 에러가 발생할 수 있다.

대소문자 변환
ord() 함수는 대소문자를 구별하지 않는다. 그렇기 때문에 대문자와 소문자 간의 유니코드 코드 포인트는 다를 수 있지만, ord() 함수를 사용하여 대소문자를 비교하거나 정렬할 때 주의해야 한다.

문자열 길이
ord() 함수는 하나의 문자에 대해서만 작동하기 때문에 문자열 전체를 인자로 전달하면 첫 번째 문자의 코드 포인트만 반환한다. 만약 문자열의 각 문자에 대한 코드 포인트를 확인하려면 문자열을 순회하면서 ord() 함수를 반복적으로 호출해야 한다.

문자 인코딩
ord() 함수는 문자열의 인코딩을 고려하지 않기 때문에 유니코드 이외의 문자 인코딩을 사용하는 경우 다른 결과를 얻을 수 있다. 유니코드 문자열에 대해서는 일반적으로 정확한 코드 포인트를 반환하지만, 다른 인코딩 방식에서는 예상치 못한 결과가 나올 수 있다.


대상 문자가 범위 내에서 유효한지, 대소문자 구분이 필요한지 문자열 전체에 대한 유니코드가 필요한지 등을 고려해야 한다는 것을 확인할 수 있었다.



마무리

파이썬을 배울수록 다른 언어에 비해 상당히 매력있는 언어라고 생각한다. 생각보다 훨씬 더 넓은 기능의 범위와 기능 하나하나가 강력하여 생산성이 좋고, 무엇보다 러닝커브가 낮기 때문에 배울수록 재밌고 쉽다고 느껴진다.
오늘 정리한 ord() 함수 역시 간단하면서 강력한 기능을 지원하고 있어 활용도가 높아 보인다. 요즘에는 매일 파이썬 내장 함수에 대해서 정리하고 있는데, 가볍게 쓰거나 대충 넘어갔던 함수들을 깊이 있게 알아보면서 정리해 보니 생각보다 더 탄탄하고 강력한 기능들인 것 같다.
ord() 함수를 통해서 유니코드에 대해 조금 더 학습할 수 있었고, 다양한 활용 방법을 생각해 적용해보는 시간은 가져야겠다.




경제 지표 서비스

https://econoflow.co.kr

 

Economy Flow

 

econoflow.co.kr

 

반응형