- 유니코드는 각 문자에 고유한 코드 포인트를 할당하고 해당 레퍼토리를 ISO/IEC 10646과 동기화합니다.
- UTF-8, UTF-16, UTF-32는 동일한 문자를 인코딩하고 손실 없는 변환을 허용합니다.
- 정규화, Bidi 및 UCD 속성은 일관된 비교, 순서 및 렌더링을 보장합니다.
- 유니코드(웹에서는 UTF-8이 바람직함)를 채택하면 손상을 방지하고 국제화를 용이하게 합니다.
유니코드는 컴퓨터가 텍스트를 처리할 때 사용하는 공통 언어입니다 . 거의 모든 문자 체계의 각 문자와 기호에 고유한 번호를 할당하여 플랫폼과 국가 간에 원활하게 저장, 처리 및 공유할 수 있도록 합니다.
이 표준은 기존 문자 집합 ( ASCII 집합 , 코드 페이지, EBCDIC 등) 의 한계를 극복하기 위해 등장했으며 , 이러한 기존 문자 집합들은 부족하거나 서로 호환되지 않았습니다. 현재는 ISO/IEC 10646과 동기화되어 있으며, 양방향 알고리즘과 같은 알고리즘을 유지하고 속성 및 정규화 규칙을 정의하여 모든 것이 일관되게 작동하도록 합니다.
유니코드란 무엇이고 왜 중요한가요?
유니코드는 각 문자를 이름, 코드 포인트 및 속성 집합(스크립트, 범주, 방향성, 대소문자 등)으로 설명하는 범용적이고 지속적으로 발전하는 문자 인코딩 표준입니다 . 유니코드 컨소시엄 내의 유니코드 기술 위원회(UTC)는 ISO/IEC 10646 표준에 맞춰 유니코드를 지속적으로 업데이트합니다.
그 목표는 보편성, 균일성, 그리고 고유성입니다 . 즉, 명확하고 재현 가능한 규칙을 통해 다국어 텍스트를 모호함 없이 교환할 수 있는 광범위한 레퍼토리를 제공하는 것입니다. 덕분에 현대 기술(운영 체제, 브라우저, XML, Java, 데이터베이스)은 동일한 문서 내에서 라틴어와 아랍어 문자, CJK 표의 문자, 이모티콘, 기술 또는 음악 기호 등을 혼합하여 사용할 수 있습니다.
문자, 글리프 및 코드 포인트
유니코드에서 문자는 추상적인 정보 단위이고, 코드 포인트는 해당 문자를 숫자로 식별하는 식별자입니다 . 글리프는 화면에 보이는 시각적 형태이며, 글꼴에 따라 달라집니다 . 하나의 문자는 여러 개의 글리프를 가질 수 있으며, 때로는 하나의 글리프가 둘 이상의 문자를 나타낼 수도 있습니다.
코드 포인트의 일반적인 표기법은 16진수로 U+XXXX 입니다 . 분석된 자료에서 발췌한 예시는 다음과 같습니다. 소문자 'l'은 U+006C, 조합된 소문자 'ü'는 U+00FC, 'é'는 U+00E9이며, 그리스어 베타의 경우 대문자는 U+0392, 소문자는 U+03B2입니다(일부 텍스트에서는 'β'를 U+0392로 표기하기도 하지만, 이 코드는 대문자 'Β'에 해당합니다).
유니코드 코드 공간은 1.114.112개의 가능한 위치(최대 U+10FFFF)를 가지고 있으며 , 모든 문자 체계와 기호를 포괄하고 분류하도록 구성되어 있고, 각 버전마다 수만 개의 유효하고 계속 증가하는 할당 위치를 포함하고 있습니다.
계획, 지역 및 블록
유니코드는 문자 공간을 각각 최대 65.536개의 코드 포인트로 구성된 17개의 평면으로 나눕니다 . 이러한 구성을 통해 관련 문자 체계와 기호를 쉽게 그룹화하고 원하는 문자를 빠르게 찾을 수 있습니다.
가장 중요한 평면은 다음과 같습니다. 기본 다국어 평면(BMP, 평면 0)에는 거의 모든 현대 알파벳과 많은 기호가 포함되어 있습니다. 보조 다국어 평면(SMP, 평면 1)에는 역사적인 문자 체계와 기술 기호(예: 음악 및 수학 기호)가 저장됩니다. 보조 표의 문자 평면(SIP, 평면 2)에는 CJK 표의 문자가 확장되어 있습니다. 평면 14(SSP)에는 특수 레이블이 포함되어 있으며, 평면 15와 16은 개인적인 용도로 사용됩니다.
구역 및 지역 : 지도는 비공식적으로 지역으로, 공식적으로는 인접한 구역으로 세분화됩니다. 구역은 문자를 집계하고 기록하는 데 사용되지만, 항상 의미 있는 언어적 집단과 일치하는 것은 아닙니다.
CJK 표의문자와 유니한 프로젝트
동아시아(한자) 표의 문자는 지역별로 약간의 차이가 있지만 모두 동일한 추상적 문자를 나타내며 유니코드에서 통일되어 있습니다. 이러한 표의 문자의 관리는 중국, 일본, 한국, 베트남, 홍콩, 마카오, 싱가포르, 미국 등을 대표하는 ISO/IEC JTC1/SC2/WG2 그룹인 표의 문자 보고 그룹(IRG)에서 담당합니다.
유니한 데이터베이스는 다양한 언어와 역사적 또는 기업 표준에 따라 이러한 표의 문자를 처리하는 데 필수적인 보조 정보(읽는 법, 의미, 동등어)를 통합합니다.
주요 CJK 블록 및 확장 기능 :
- CJK 통합 표의문자(BMP, U+4E00–U+9FFF): 일반적으로 사용되는 문자는 20.992개입니다.
- 확장자 A(BMP, U+3400–U+4DBF): 6.592개의 덜 자주 쓰이는 표의문자.
- B-H 확장: SMP/SIP/TIP에서는 수만 개 더 추가됩니다(B: U+20000–U+2A6DF, 42.720; C: U+2A700–U+2B73F, 4.154; D: U+2B740–U+2B81F, 222; E: U+2B820–U+2CEAF, 5.762; F: U+2CEB0–U+2EBEF, 7.473; G: U+30000–U+3134F, 4.939;
- 기타 관련 CJK 블록: 강희 부수(U+2F00–U+2FDF), CJK 기호 및 구두점(U+3000–U+303F), 호환성 및 호환성 형식, 호환성 표의문자 보충 등.
유니코드는 표의문자 통합이 절대적인 종착점이 없을 것으로 예상하며 , 부호화되지 않은 기호를 기존 구성 요소로 분해하여 표의문자 설명 시퀀스와 같은 메커니즘으로 표현하는 방안을 고려하고 있습니다(단, 정규 분해나 검색 또는 순서 지정과 같은 작업에서의 정확성 보장은 없음을 유의해야 합니다).
인코딩 형식: UTF-8, UTF-16 및 UTF-32
유니코드는 코드 포인트를 저장 단위로 변환하는 변환 형식(UTF)을 정의하여 소프트웨어가 문맥에 따라 텍스트를 효율적으로 처리할 수 있도록 합니다.
UTF-8 은 가변 길이 바이트 지향 인코딩 형식으로, 단일 바이트 내에서 U+0000~U+007F 범위의 ASCII 호환이 가능합니다. 현재 표준은 문자당 1~4바이트를 사용하며, 일부 오래된 문헌에서는 1~6바이트를 언급하기도 하지만, 최신 유니코드에서는 1~4바이트가 일반적입니다. UTF-8은 웹에서 가장 널리 사용되는 인코딩 형식입니다.
UTF-16은 16비트 단위를 사용합니다.
(문자당 하나 또는 두 개의 코드 단위) : 대부분의 BMP 문자는 하나의 단위에 맞습니다. 보조 문자는 U+D800~U+DFFF 범위의 서로게이트 쌍을 사용합니다.
UTF-32 는 문자당 4바이트의 고정 길이를 가지므로 간단하지만 공간을 많이 차지합니다. 따라서 문자 직접 인덱싱이 중요하고 메모리 제약이 없는 경우에 유용합니다.
UTF-8에서 비트가 어떻게 분배되는가
UTF-8 형식은 코드 포인트 비트를 식별 가능한 헤더가 있는 1~4바이트 시퀀스로 분배하여 모호성을 방지하고 문자 경계를 쉽게 감지할 수 있도록 합니다.
| 유니코드 범위 | 비트 패턴 | 바이트 |
|---|---|---|
| U+0000..U+007F | 0xxxxxxxxx | 1 |
| U+0080..U+07FF | 110년 10xxxxxx | 2 |
| U+0800..U+FFFF | 1110zzzz 10yyyyyy 10xxxxxx | 3 |
| U+010000..U+10FFFF | 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx | 4 |
UTF-8의 주요 장점은 바이트 순서(엔디안) 문제를 방지 하고 ASCII와의 하위 호환성을 유지하면서 텍스트 스트림을 매우 효율적으로 처리할 수 있다는 점입니다.
인코딩 방식, 엔디안 및 BOM
유니코드는 UTF 형식 외에도 엔디안 방식이 다른 시스템 간에 바이트를 전송하는 방법과 바이트 순서와 같은 측면을 나타내는 방법을 결정하는 직렬화 체계를 설명합니다.
- UTF-8: 엔디안 방식이 적용되지 않습니다. 바이트 순서 표시 (BOM)은 기본적으로 요구되거나 권장되는 것은 아니지만 힌트로 제공됩니다.
- UTF-16: BE/LE(빅/리틀 엔디언) 변형 및 선택적 BOM(누락되어 프로토콜에서 정의되지 않은 경우 빅 엔디언으로 가정).
- UTF-32: 유사한 규칙이 적용된 BE/LE 변형; BOM은 주문 표시로 허용됩니다.
UTF-16BE/UTF-16LE 및 UTF-32BE/UTF-32LE(관례상 BOM 없음)와 같은 특정 변형뿐만 아니라 UTF-7 또는 UTF-EBCDIC와 같은 기존의 호환성 인코딩도 있으며 , GB18030(간체 및 번체 중국어를 지원하는 UTF-8의 중국어 버전)도 있습니다.
정규화, 구성 및 동등성
많은 문자는 미리 구성된 형태 또는 기본 문자 + 결합 기호의 조합으로 표현될 수 있습니다 . 개정된 자료에서 볼 수 있는 대표적인 예로는, 미리 구성된 'Ä'는 U+00C4이고, 분해된 형태는 'A'(U+0041) + 움라우트(U+0308)입니다. 베트남어 'ỗ'는 'o'(U+006F) + 곡절 부호(U+0302) + 물결표(U+0303)로 표현될 수 있습니다.
유니코드는 표준화된 형식과 두 가지 유형의 동등성을 정의합니다 . 하나는 정규 동등성(동일한 핵심 내용)이고 다른 하나는 호환성 동등성(겉보기에는 같지만 의미상 차이가 있는 형식)입니다. 표준화는 신뢰할 수 있는 문자열 비교를 보장하고 중복을 줄입니다.
양방향 알고리즘 및 특수 문자
아랍어나 히브리어와 같이 오른쪽에서 왼쪽으로 쓰는 문자 체계의 경우, 유니코드는 라틴어와 아랍어가 혼합된 텍스트가 올바른 시각적 순서로 표시되도록 표준화되고 지속적으로 발전하는 양방향 알고리즘(Bidi)을 통합합니다(예: 6.3 버전의 개정 사항).
수신된 자료에 따라 알아야 할 코드 포인트 클래스는 다음과 같습니다 . 그래픽 문자(문자, 기호, 심볼), 서식(처리 과정에 영향을 미치는 보이지 않는 문자: U+2028 줄 바꿈, U+2029 단락 바꿈, U+00A0 하드 스페이스), 호환성을 위한 상속된 제어 코드(U+0000~U+001F, U+007F, U+0080~U+009F 범위), 개인 용도, 예약 위치, 대체 문자(UTF-16의 경우 U+D800~U+DFFF) 및 비문자(각 평면에서 U+FFFE, U+FFFF).
유니코드, ISO/IEC 10646 및 기타 표준(ASCII, ANSI, 코드 페이지)
유니코드는 ISO/IEC 10646(UCS)과 동기화되어 있으며, 이전 표준 (ASCII, ISO 8859-1, ANSI Z39.64, JIS X 0208, KS X 1001, GB 2312, GB 18030, HKSCS, CNS 11643 등)과의 매핑을 유지하는 동시에 제조업체의 개인적인 사용을 위한 공간을 확보하고 있습니다.
ASCII와 유니코드의 차이점 : ASCII는 128개의 문자를 가진 7비트 문자 집합으로 , 기본적인 영어 표현에는 충분하지만 발음 구별 기호, 표의 문자, 이모티콘 등을 사용하는 언어에는 부족합니다 . 유니코드는 14만 개 이상의 문자를 지원하며, UTF-12 형식을 기반으로 8/16/32비트 인코딩을 통해 지속적으로 확장되고 있습니다.
ANSI와 코드 페이지 : 'ANSI'는 일반적으로 제한적이고 상호 호환되지 않는 8비트 Windows 코드 페이지를 의미합니다. OEM-Latin II를 실행하는 컴퓨터에서 IBM EBCDIC-Cyrillic 형식의 텍스트를 열면 잘못된 문자가 표시됩니다. 유니코드는 단일 문자 집합과 자체 형식 간의 무손실 변환을 통해 이 문제를 해결합니다.
시스템(Windows, Solaris) 구현 및 변환
Windows는 최신 API에 내부적으로 UTF-16을 사용하며 , 유니코드와 코드 페이지(SBCS/DBCS/MBCS) 간 변환을 위해 MultiByteToWideChar 및 WideCharToMultiByte 와 같은 기능을 제공합니다. 코드 페이지로 변환해야 하는 경우, 모든 문자를 표현할 수 없다면 데이터 손실이 발생할 수 있습니다 .
Windows용 새 애플리케이션은 내부적으로 UTF-16을 사용하고 변환은 외부(I/O, 프로토콜)에서 수행하여 데이터 손상을 최소화해야 합니다. 그럼에도 불구하고 Windows는 불가피한 경우 코드 페이지와의 호환성을 유지합니다.
개정된 문서에 따르면 Oracle Solaris 11은 시스템 수준에서 유니코드 6.0 및 ISO/IEC 10646:2011을 지원하며, 파라미터 세트에서 기본 형식으로 UTF-8을 사용하여 바이트 순서 문제를 방지하고 ASCII를 투명하게 유지합니다.
실제 유니코드: 웹, 문서 및 프로그래밍
웹에서는 콘텐츠를 UTF-8로 제공하고 저장하는 것이 일반적입니다 . HTML에서는 호환성을 보장하기 위해 '<meta charset="UTF-8">'을 선언하고, 필요한 경우 16진수 숫자 엔티티를 사용하십시오(예: 유로 '€').
Word에서는 커서를 놓거나, 삽입 > 기호를 선택하거나, 코드를 입력하고 Alt+X를 눌러 유니코드 기호를 쉽게 삽입할 수 있습니다. Alt+X를 누르면 표준 절차에 따라 값이 해당 문자로 변환됩니다. 키보드에서 기호를 삽입하는 Alt 코드 목록 도 참조하십시오.
프로그래밍 언어에서 파이썬 3는 문자열이 이미 유니코드를 지원하고, 자바와 C#에서는 이스케이프 문자 '\uXXXX'를, HTML에서는 '&#xXXXX;'를 사용할 수 있습니다. 중요한 것은 편집, 컴파일, 전송 시 모두 동일한 인코딩을 사용해야 오류가 발생하지 않는다는 점입니다.
전체 문자열이 유니코드 형식인 경우 기호를 복사하여 붙여넣으면 정상적으로 작동합니다 . 하지만 문자열의 일부가 다른 인코딩을 사용하는 경우 물음표, 사각형 또는 기타 이상한 기호가 나타날 수 있습니다.
캐릭터 데이터베이스(UCD), 속성 및 카테고리
유니코드 문자 데이터베이스(UCD)는 각 코드 포인트에 대해 이름, 범주, 스크립트, 대소문자 속성, 방향성 및 기타 특성을 게시합니다 . 이 정보는 렌더링 엔진과 텍스트 처리가 올바르게 작동하는 데 필수적입니다.
이러한 특성 덕분에 정렬, 단어 분할 또는 대문자/소문자 변환과 같은 다양한 구성 요소와 알고리즘이 동일한 데이터에 대해 일관되게 작동할 수 있습니다.
표준의 버전 및 확장: 주요 내용
유니코드는 버전이 나올 때마다 새로운 문자 체계, 기호, 이모티콘을 포함하며 성장해 왔습니다. 주요 이정표로는 7.161개의 문자를 포함한 1991년 버전 1.0과 그 이후 수천 개의 새로운 기호, 표의 문자, 이모티콘, 문자 체계를 추가한 확장판이 있습니다.
예를 들어, 2022년 버전 15.0에서는 4.192개의 CJK 한자와 기타 요소가 추가되어 총 약 149.186개의 문자가 되었습니다.
유니코드 테이블 탐색 도구
문자를 검색하고 분석하는 데 사용할 수 있는 무료 유틸리티로는 Unibook Character Browser, SYMBL, Branah.com 등이 있습니다. 이러한 도구를 사용하면 속성, 이름, 문자 블록을 조회할 수 있어 개발자와 콘텐츠 제작자가 필요한 정보를 빠르게 찾을 수 있습니다.
사용 사례: 주소 양식, 국제화 및 비즈니스
사용자가 자신의 언어와 문자로 주소를 입력할 수 있도록 하면 오류를 줄이고 사용자 경험을 개선하는 데 도움이 됩니다. 또한 유니코드 상호 운용성은 서로 다른 시스템 간의 변환 문제를 방지하여 디지털 체인 전체에서 텍스트 무결성을 유지합니다.
이러한 이유로 유니코드는 웹 양식부터 데이터베이스 시스템, 인쇄물에 이르기까지 디지털 인프라 전반에서 텍스트의 최종성을 보장하는 핵심 요소입니다. 즉, 문장 내에서 'ñ', 아랍어, 중국어 또는 이모티콘을 사용하더라도 텍스트가 항상 정확하게 유지되도록 합니다.