String
문자열String
Keywords
문자 인코딩 : 문자 집합을 메모리에 저장하거나 통신하기 위해 부호화 하는 방식
문자 집합 : 문자를 모아 둔 것
코드 포인트 : 특정 문자를 표현할 수 있게 매핑된 정수
부호화된 문자 집합(Coded Character Set, CCS) : 코드 포인트를 모아 놓은 집합
ASCII CODE
아스키 문자는 모드 포인트 수가 128개인 CCS이다. 2진수로 0000 0000 ~ 0111 1111 까지 이므로 표현하는데 최대 7비트가 필요하다. 정수를 나타내는데 쓰이는 자료형은 int 형이 일반적이나, int형(32비트), short형(16비트) 모두 7비트를 담기엔 크기가 크므로 문자를 표현하기 위한 Char형이라는 새로운 정수 자료형이 만들어졌다. char형은 문자를 담기 위해 만들어진 자료형이지만, 정수 자료형이므로 작은 수를 표현하는 데 사용하기도 한다.
Unicode
세계 각국에 인터넷이 보급되고, 컴퓨터를 쓸 수 있는 언어가 많아짐에 따라 7비트를 16비트로 확장하였다. 7비트는 \(2^7\)만큼의 문자를 표현하는 반면, 16비트는 \(2^{16}\)만큼의 문자를 표현할 수 있다.
Unicode Encoding
- 코드 유닛 : 코드 포인트를 특정한 방법으로 인코딩했을 때 변환되어 얻어지는 비트의 나열
- 문자 인코딩 방식(Character Encoding Scheme, CES) : 코드 유닛을 옥텟으로 나열하여 변환하는 방법
- 옥텟 : 데이터의 단위, 8비트를 의미, 현재는 모두 8비트 단위를 사용함
UTF-8
UTF-8은 문자 하나를 1바이트에서 4바이트 사이에서 표현한다. U+0000~U+007F는 1바이트, U+0080~U+07FF는 2바이트, U+0800~U+FFFF는 3바이트, 나머지는 4바이트로 표현한다. 문자에 따라 바이트 수가 달라지므로 가변 길이 인코딩 방식이라고 부른다.
문자 ‘가’(U+AC00)는 0xEAB080으로 변환되는데, 다음 포맷을 사용한다.
AAAA에는 바이트 수를 표기한다. 문자가 1바이트로 표현되면 1000, 2바이트는 1100, 3바이트는 1110이다. X로 표시된 부분은 문자의 코드 포인트를 2진수로 변환한 후 차례대로 채운다.
>>> bin(0xAC00)
'0b1010110000000000'
따라서 포맷을 완성하면\(11101010 \ 10110000 \ 10000000\) 이며, 이를 16진수로 변환하면 0xEAB080이다.
>>> hex(a), hex(b), hex(c)
('0xea', '0xb0', '0x80')
UTF-16
UTF-16은 2바이트 단위로 문자를 표현한다. 기본 다국어 평면위에 존재하면 2바이트, 그렇지 않으면 4바이트로 인코딩된다. 코드 유닛의 크기는 16비트이다. ‘가’를 인코딩하면 00 AC이다. 문자 ‘가’의 코드 포인트를 바이트 단위로 순서만 바꾼것과 같으며, 기본 다국어 평면 위에 존재하여 2바이트로 표현된다.
UTF-32
UTF-32는 모든 문자를 4바이트로 표현하며, 코드 유닛의 크기는 32비트이다. ‘가’를 인코딩하면 00 AC 00 00 이다.
ET Cetra.
다른 문자열과는 다르게 파이썬 문자열은 요소를 변경할 수 없다.
Enjoy Reading This Article?
Here are some more articles you might like to read next: