Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발부터 자유까지

[Python] 유니코드, 내장함수 ord, chr 본문

Python

[Python] 유니코드, 내장함수 ord, chr

건물주개발자 2025. 4. 10. 16:09

목차

유니코드와 문자열

ord 함수

chr 함수

중제목3

 

유니코드와 문자열

유니코드가 나오기 전에 아스키 코드가 있었다. 아스키 코드는 영문자를 대상으로 문자를 숫자로 맵핑하기 위한 체계이다.

총 128개의 문자를 7bit로 표현하고 1bit는 통신 에러 검출을 위해 사용하기 때문에 총 8bit로 표현한다.

 

아스키 코드 (ASCII) - American Standard Code for Information Interchange
  • 범위: 아스키 코드는 7비트로 표현되어 총 128개의 문자를 담을 수 있습니다 (0~127까지의 정수값).
  • 지원문자: 아스키 코드는 주로 영문 알파벳, 숫자, 일부 특수 문자 및 제어 문자를 포함합니다.
  • 사용: 초기 컴퓨터 시스템에서 널리 사용되었으며, 영어를 사용하는 텍스트를 처리하는 데 적합했습니다.

ASCII 코드표

 

 

유니코드 - 유니코드 문자를 기존 문자 체계와의 상호 호환을 위해가변 길이의 바이트열 값으로 인코딩하는 방식. 유니코드(Unicode)는 전 세계의 거의 모든 문자에 고유 숫자를 부여한문자 집합으로, 1993년국제 표준(ISO/IEC10646)으로 제정되었다.유니코드는 기본적으로 2 바이트(16 bit)로 한 문자를 표현하여, 기존 7 비트 또는 8 비트로 한 문자를 표현하는 아스키(ASCII) 문자 기반 시스템과 호환을 위해 UTF(Unicode Transformation Format)를 사용한다.

 

  • 범위: 유니코드는 0x0000에서 0x10FFFF까지 1,114,112개의 코드 포인트를 포함할 수 있으며, 이 중 약 143,859개가 2023년 기준으로 문자로 정의되어 있습니다.
  • 지원문자
    • 문자와 스크립트: 유니코드는 라틴 문자, 그리스 문자, 키릴 문자, 한자, 일본어, 한국어(한글), 아라비아 문자 등 전 세계의 주요 및 많은 부수적인 문자를 지원합니다.
    • 특수 문자: 수학 기호, 화살표, 도형, 이모지, 제어 문자, 음악 기호 등도 포함됩니다.
    • 고대 문자: 고대 이집트의 상형 문자, 메소포타미아의 쐐기 문자 등 역사적으로 중요한 많은 문자 체계도 포함됩니다.
  • 사용: 아스키 코드로는 다양한 문자를 대응하기 어렵기 때문에 유니코드가 필요해졌다.

UTF 인코딩 방식으로 UTF-8, UTF-16 및 UTF-32 등이 있다. UTF 뒤의 숫자는 한 문자를 인코딩하는 길이로, UTF-8은 유니코드 문자를 8비트(1바이트) 값으로 인코딩함을 의미한다. 대표적인 UTF 인코딩 방식은 다음과 같다.


▷ UTF-8: 모든 유니코드 문자(코드포인트)를 1 ~ 4 바이트의 8 비트 단위로 인코딩한다. 유니코드 문자 모두를 인코딩하며 가장 많이 사용되는 방식이다. 표준 영어 및 기호는 1 바이트(7비트 ASCII와 동일), 추가 라틴 및 중동 문자는 2 바이트, 한글을 포함한 아시아 문자는 3 바이트, 그리고 추가 문자는 4 바이트를 사용하여 표현한다. 웹에서 많이 사용되며, W3C는 XML 및 HTML의 기본 인코딩으로 UTF-8을 권장한다.


▷ UTF-16: 2 바이트(16 비트) 단위로 1~ 2개를 사용하여 유니코드의 유효한 모든 문자를 인코딩할 수 있다. 기본 다국어 평(BMP: Basic Multilingual Plane)에 속하는 문자들은 그대로 16 비트 값으로 인코딩하고, 추가 문자는 32 비트(16비트 2개) 값으로 인코딩한다. 자바(Java) 프로그래밍에서 기본으로 사용된다.


▷ UTF-32: 유니코드 문자를 모두 4 바이트(32 비트) 고정 길이로 인코딩한다. 유니코드의 모든 문자에 해당하는 UTF-32 값이 색인화되어 있어, 인코딩 변환 처리가 따로 필요 없다. 그러나 모든 문자가 4 바이트를 차지하는 메모리상의 비효율로 다른 UTF-8과 UTF-16에 비해 많이 사용되지 않는다.

예를 들어, 알파벳 대문자 ‘A’의 유니코드 값(코드포인트※)은 'U+0041'로, UTF-8로 변환하면 0x41(이진수 01000001), UTF-16으로 변환하면 0x0041, UTF-32로 변환하면 0x00000041(십진수 65)이다.

 

한글 ‘가’의 유니코드 값은 ‘U+AC00'이다. 이를 UTF-8로 변환하면, 0xEA 0xB0 0x80(이진수 11101010:10110000:10000000), UTF-16으로 변환하면 0xAC00, UTF-32로 변환하면 0x0000AC00(십진수 44,032)이다.

※ 유니코드에서 각 문자에 부여하는 고유 숫자 값(예: U+0041)을 코드 포인트(code point)라 한다.

 

 

출처1 - http://terms.tta.or.kr/dictionary/dictionaryView.do?word_seq=059151-5

출처2 - https://forward-movement.tistory.com/182

 

유니코드 코드표는 아래 사이트에서 hex code(16진수)로 검색가능하다

https://www.unicode.org/charts/

 

 

 

ord 함수

하나의 유니코드 문자를 나타내는 문자열이 주어지면 해당 문자의 유니코드 코드 포인트를 나타내는 정수를 돌려준다.

예를 들어, ord('a') 는 정수 97 을 반환하고 ord('€') (유로 기호)는 8364 를 반환합니다. 이것은 chr() 의 반대이다.

c = 'A'
code_point = ord(c)
print(code_point)  # 출력: 65

ord('€') # 출력: 8364

 

https://docs.python.org/ko/3.13/library/functions.html#ord

 

 

chr 함수

유니코드 코드 포인트가 정수 i 인 문자를 나타내는 문자열을 돌려준다. 예를 들어, chr(97) 은 문자열 'a' 를 돌려주고, chr(8364) 는 문자열 '€' 를 돌려줍니다. 이 것은 ord() 의 반대입니다.

인자의 유효 범위는 0에서 1,114,111(16진수로 0x10FFFF)까지입니다. i 가 이 범위 밖에 있을 때 ValueError 가 발생합니다.

number = 65
c = chr(number)
print(c)  # 출력: 'A'

>>> chr(8364) # 출력: '€'


https://docs.python.org/ko/3.13/library/functions.html#chr