E D R , A S I H C RSS

유니코드

last modified: 2015-04-13 17:30:15 by Contributors

목차

1. 개요
2. 역사
3. 표기 관례
4. 유니코드의 구조
4.1. 유니코드와 한글
4.1.1. 한글 전산화의 잔혹사(?)
4.1.2. 조합형 낱자들로 만들 수 있는 한글 완성자의 수
4.2. 유니코드와 한자
4.2.1. 한중일 통합 한자와 한중일 호환용 한자의 차이
4.2.2. 미세한 이체자 처리 문제
5. 유니코드의 인코딩
5.1. UTF-8
5.2. UTF-16
6. 유니코드 지원 폰트
7. 개별 항목이 있는 유니코드 문자
8. 관련 항목

유니코드 홈페이지 (영어)

Unicode

1. 개요

전 세계의 모든 문자를 다루도록 설계된 표준 문자 전산 처리 방식. 주요 구성 요소는 ISO/IEC 10646 Universal Character Set과 UCS, UTF 등의 인코딩 방식, 문자 처리 알고리즘 등이다. 흔히 우리가 웹 브라우저의 인코딩을 설정하면서 자주 보는 UTF-8이라는 말이 바로 유니코드에 기반한 인코딩 방식 중 하나를 가리키는 것이다.

전 세계의 모든 문자를 담는 ISO/IEC 10646 코드표를 사용함으로써, 각 언어와 문자 체계에 따른 충돌 문제를 해결하였다. 따라서 유니코드를 사용하면 한글신자체·간체자, 아랍 문자 등을 통일된 환경에서 깨뜨리지 않고 사용할 수 있다.

현재의 유니코드는 지구상에서 통용되는 대부분의 문자들을 담고 있다. 여기에는 언어를 표기할 때 쓰는 문자는 물론, 악보 기호, 이모티콘, 태그, 마작이나 도미노 기호 같은 것들도 포함된다. 다만 모든 문자 체계를 담고 있는 것은 아니라서, 서하 문자처럼 과거에 사용된 문자 체계나 자료가 많이 남아 있지 않은 문자 체계는 아직 유니코드로 표현할 수 없다.

연합뉴스 홈페이지에서는 유니코드를 지원하는데도 한자 표기를 원칙적으로 한국에서만 쓰는 한자로 표기하고 있어서 문제가 되고 있다. 유니코드를 쓰면 다른 한자 사용국의 한자도 표기할 수 있는데 말이다. 한자를 억지로 파자해 놓고 +기호로 표기하기도 한다. 籾자를 /米+刃/라고 쓰는 등. 심지어는 畠을 '白밑에田'이라고 표현하기도 한다. 그게 그렇게 어렵나

2. 역사

유니코드는 1991년 10월에 최초 버전(1.0.0)이 발표됐으며, 2014년 6월 현재 최신 버전은 2014년 6월에 발표된 7.0이다. 자세한 것은 영어 위키백과의 Unicode#Versions 참고.

3. 표기 관례

유니코드 문자의 경우 해당 글자의 코드를 표기할 때 U+(16진수 숫자)[1]라고 쓴다. 예를 들면 한글 '가' 자는 유니코드에서 16진수로 AC00(10진수의 44032)라는 코드 넘버를 가지는데, 이것을 U+AC00이라고 적는 식이다.

4. 유니코드의 구조


유니코드 문자 집합의 문자 평면
기본 보조
Plane 0
0000 ~ FFFF
Plane 1
10000 ~ 1FFFF
Plane 2
20000 ~ 2FFFF
Planes 3–13
30000 ~ 3FFFF
Plane 14
E0000 ~ EFFFF
Planes 15–16
F0000 ~ 10FFFF
기본 다국어 평면
BMP
보조 다국어 평면
SMP
보조 표의문자 평면
SIP
3차 표의문자 평면
TIP
보조 특수 목적 평면
SSP
사용자 자유 영역
PUA
0000~0FFF 8000~8FFF 10000~10FFF 18000~18FFF 20000~20FFF 28000~28FFF E0000~E0FFF 15: PUA-A
1000~1FFF 9000~9FFF 11000~11FFF 19000~19FFF 21000~21FFF 29000~29FFF F0000–​FFFFF
2000~2FFF A000~AFFF 12000~12FFF 1A000~1AFFF 22000~22FFF 2A000~2AFFF
3000~3FFF B000~BFFF 13000~13FFF 1B000~1BFFF 23000~23FFF 2B000~2BFFF 문자 없음 16: PUA-B
4000~4FFF C000~CFFF 14000~14FFF 1C000~1CFFF 24000~24FFF 2C000~2CFFF 100000–​10FFFF
5000~5FFF D000~DFFF 15000~15FFF 1D000~1DFFF 25000~25FFF 2D000~2DFFF
6000~6FFF E000~EFFF 16000~16FFF 1E000~1EFFF 26000~26FFF 2E000~2EFFF
7000~7FFF F000~FFFF 17000~17FFF 1F000~1FFFF 27000~27FFF 2F000~2FFFF



유니코드는 대개 기본 문자가 들어 있는 BMP(Basic multilingual plane), BMP에 없는 옛글자 등을 넣는 SMP(Supplementary Multilingual Plane), 골 문자소전 등을 넣기 위해 별도로 정의한 SIP(Supplementary Ideographic Plane), 앞의 영역에 포함되지 않는 기타 문자 등이 들어가는 SSP(Supplementary Special-purpose Plane), 자유 영역인 PUA(Private Use Area) 등이 정의되어 있다.[2]

자세한 구조는 다음 표와 같다.[3] 아래 표에 나온 번역명은 결코 공식적이지 않고 공신력이 없다. 어디까지나 '가능한 번역' 중의 하나이며 오역도 있을 수 있다. 아래의 번역명들은 단지 편의를 위해 제공하는 것뿐이며, 따라서 아래의 번역명들을 공식 번역처럼 사용하는 것은 권장되지 않는다. 그러므로 원어명을 같이 기재한다.

'한중일 통합 한자'는 정확히 말하면 '한중일월 통합 한자'라고 해야 맞다. 유니코드의 '한중일 통합 한자'에는 근대 이전에 베트남어의 고유어를 표기하기 위해 사용하던 쯔놈 글자들도 섞여 있기 때문이다. 그런데 이미 유니코드 초창기(1.0)부터 CJK Unified Ideograph(s)로 불렀고(당시에는 한국, 중국, 대만, 일본의 표준 문자 코드만을 고려했고, 쯔놈은 상대적으로 나중에 추가됐다), 영역 이름과 문자 이름은 한 번 정해지면 절대로 고칠 수 없기 때문에 이를 CJKV로 고치기에는 이미 너무 늦었다.

평면 코드 영역 글자 수 해당하는 문자 UTF-8 바이트 수
BMP U+0000 ~ U+007F 128자 제어 문자와 라틴 기본[4][5]
C0 Controls and Basic Latin
1
U+0080 ~ U+00FF 128자 제어 문자와 라틴 보충
C1 Controls and Latin-1 Supplement
2
U+0100 ~ U+017F 128자 라틴 확장-A
Latin Extended-A
U+0180 ~ U+024F 208자 라틴 확장-B
Latin Extended-B
U+0250 ~ U+02AF 96자 국제 음성 기호 확장
IPA Extensions
U+02B0 ~ U+02FF 80자 조정 문자
Spacing Modifier Letters
U+0300 ~ U+036F 112자 조합 분음 기호
Combining Diacritical Marks
U+0370 ~ U+03FF 144자 그리스어콥트어
Greek and Coptic
U+0400 ~ U+04FF 256자 키릴 자모
Cyrillic
U+0500 ~ U+052F 48자 키릴 자모 보충
Cyrillic Supplement
U+0530 ~ U+058F 96자 아르메니아어
Armenian
U+0590 ~ U+05FF 112자 히브리어
Hebrew
U+0600 ~ U+06FF 256자 아랍어
Arabic
U+0700 ~ U+074F 80자 리아어
Syriac
U+0750 ~ U+077F 48자 아랍어 보충
Arabic Supplement
U+0780 ~ U+07BF 64자 타나 문자
Thaana
U+07C0 ~ U+07FF 64자 코 문자
N'Ko
U+0800 ~ U+083F 64자 마리아 문자
Samaritan
3
U+0840 ~ U+085F 32자 다이어
Mandaic
U+08A0 ~ U+08FF 96자 아랍어 확장-A
Arabic Extended-A
U+0900 ~ U+097F 128자 데바나가리
Devanagari
U+0980 ~ U+09FF 128자 벵골어
Bengali
U+0A00 ~ U+0A7F 128자 르무키 문자
Gurmukhi
U+0A80 ~ U+0AFF 128자 자라트 문자
Gujarati
U+0B00 ~ U+0B7F 128자 리야어
Oriya
U+0B80 ~ U+0BFF 128자 타밀어
Tamil
U+0C00 ~ U+0C7F 128자 텔루구어
Telugu
U+0C80 ~ U+0CFF 128자 나다어
Kannada
U+0D00 ~ U+0D7F 128자 라얄람어
Malayalam
U+0D80 ~ U+0DFF 128자 싱할라어
Sinhala
U+0E00 ~ U+0E7F 128자 타이어
Thai
U+0E80 ~ U+0EFF 128자 라오어
Lao
U+0F00 ~ U+0FFF 256자 티베트어
Tibetan
U+1000 ~ U+109F 160자 미얀마어
Myanmar
U+10A0 ~ U+10FF 96자 조지아어
Georgian
U+1100 ~ U+11FF 256자 한글 자모[6]
Hangul Jamo
U+1200 ~ U+137F 384자 티오피아어
Ethiopic
U+1380 ~ U+139F 32자 티오피아어 보충
Ethiopic Supplement
U+13A0 ~ U+13FF 96자 체로키어
Cherokee
U+1400 ~ U+167F 640자 통합 캐나다 원주민 소리 마디
Unified Canadian Aboriginal Syllabics
U+1680 ~ U+169F 32자 오검 문자
Ogham
U+16A0 ~ U+16FF 96자 룬 문자
Runic
U+1700 ~ U+171F 32자 타갈로그어
Tagalog
U+1720 ~ U+173F 32자 누누어
Hanunoo
U+1740 ~ U+175F 32자 히드어
Buhid
U+1760 ~ U+177F 32자 그반와어
Tagbanwa
U+1780 ~ U+17FF 128자 크메르어(캄보디아어)
Khmer
U+1800 ~ U+18AF 176자 몽골어
Mongolian
U+1900 ~ U+194F 80자
Limbu
U+1950 ~ U+197F 48자 이 레 문자
Tai Le
U+1980 ~ U+19DF 96자 이 루에
Tai Lue
U+19E0 ~ U+19FF 32자 크메르 기호
Khmer Symbols
U+1A00 ~ U+1A1F 32자 기 문자
Buginese
U+1A20 ~ U+1AAF 144자 나 문자
Tai Tham
U+1B00 ~ U+1B7F 128자 리 문자
Balinese
U+1B80 ~ U+1BBF 64자 다어
Sundanese
U+1BC0 ~ U+1BFF 64자 타크어
Batak
U+1C00 ~ U+1C4F 80자 차어
Lepcha
U+1C50 ~ U+1C7F 48자 치키 문자
Ol Chiki
U+1CC0 ~ U+1CCF 16자 다어 보충
Sundanese Supplement
U+1CD0 ~ U+1CFF 48자 다어 확장
Vedic Extensions
U+1D00 ~ U+1D7F 128자 음성 부호 확장
Phonetic Extensions
U+1D80 ~ U+1DBF 64자 음성 부호 확장 보충
Phonetic Extensions Supplement
U+1DC0 ~ U+1DFF 64자 조합 분음 부호 보충
Combining Diacritical Marks Supplement
U+1E00 ~ U+1EFF 256자 라틴 문자 추가 확장
Latin extended additional
U+1F00 ~ U+1FFF 256자 그리스어 확장
Greek Extended
U+2000 ~ U+206F 112자 일반 구두점
General Punctuation
U+2070 ~ U+209F 48자 위 첨자와 아래 첨자
Superscripts and Subscripts
U+20A0 ~ U+20CF 48자 화폐 기호
Currency Symbols
U+20D0 ~ U+20FF 48자 조합 분음 부호(기호)
Combining Diacritical Marks for Symbols
U+2100 ~ U+214F 80자 글자를 변형한 기호
Letterlike Symbols
U+2150 ~ U+218F 64자 여러 가지
Number Forms
U+2190 ~ U+21FF 112자 화살표
Arrows
U+2200 ~ U+22FF 256자 수학 연산자
Mathematical Operators
U+2300 ~ U+23FF 256자 여러 가지 기술 기호
Miscellaneous Technical
U+2400 ~ U+243F 64자 제어 문자 기호
Control Pictures
U+2440 ~ U+245F 32자 문자 인식(OCR) 기호
Optical Character Recognition
U+2460 ~ U+24FF 160자 괄호 문자
Enclosed Alphanumerics
U+2500 ~ U+257F 128자 상자 그리기 기호
Box Drawing
U+2580 ~ U+259F 32자 네모 기호
Block Elements
U+25A0 ~ U+25FF 96자 도형 기호
Geometric Shapes
U+2600 ~ U+26FF 256자 여러 가지 기호
Miscellaneous Symbols
U+2700 ~ U+27BF 192자 기호
Dingbats
U+27C0 ~ U+27EF 48자 여러 가지 수학 기호-A
Miscellaneous Mathematical Symbols-A
U+27F0 ~ U+27FF 16자 화살표 보충-A
Supplemental Arrows-A
U+2800 ~ U+28FF 256자 점자
Braille Patterns
U+2900 ~ U+297F 128자 화살표 보충-B
Supplemental Arrows-B
U+2980 ~ U+29FF 128자 여러 가지 수학 기호-B
Miscellaneous Mathematical Symbols-B
U+2A00 ~ U+2AFF 256자 수학 연산자 보충
Supplemental Mathematical Operators
U+2B00 ~ U+2BFF 256자 여러 가지 기호와 화살표
Miscellaneous Symbols and Arrows
U+2C00 ~ U+2C5F 96자 라골 문자
Glagolitic
U+2C60 ~ U+2C7F 32자 라틴 확장-C
Latin Extended-C
U+2C80 ~ U+2CFF 128자 콥트어
Coptic
U+2D00 ~ U+2D2F 48자 조지아어 보충
Georgian Supplement
U+2D30 ~ U+2D7F 80자 피나그
Tifinagh
U+2D80 ~ U+2DDF 96자 티오피아어 보충
Ethiopic Extended
U+2DE0 ~ U+2DFF 32자 키릴 자모 확장-A
Cyrillic Extended-A
U+2E00 ~ U+2E7F 128 구두점 보충
Supplemental Punctuation
U+2E80 ~ U+2EFF 128자 한중일 부수 보충
CJK Radicals
U+2F00 ~ U+2FDF 224자 강희자전 부수
Kangxi Radicals
U+2FF0 ~ U+2FFF 16자 한자 생김꼴 지시 부호
Ideographic Description Characters
U+3000 ~ U+303F 64자 한중일 기호 및 구두점
CJK Symbols and Punctuation
U+3040 ~ U+309F 96자 히라가나
Hiragana
U+30A0 ~ U+30FF 96자 가타카나
Katakana
U+3100 ~ U+312F 48자 주음부호
Bopomofo
U+3130 ~ U+318F 96자 호환용 한글 자모
Hangul Compatibility Jamo
U+3190 ~ U+319F 16자 훈독 순서 지시 부호
Kanbun
U+31A0 ~ U+31BF 32자 주음 부호 확장
Bopomofo Extended
U+31C0 ~ U+31EF 48자 한중일 한자
CJK Strokes
U+31F0 ~ U+31FF 16자 가타카나 음성 확장
Katakana Phonetic Extensions
U+3200 ~ U+32FF 256자 한중일 괄호 문자
Enclosed CJK Letters and Months
U+3300 ~ U+33FF 256자 한중일 호환용
CJK Compatibility
U+3400 ~ U+4DBF 6,592자 한중일 통합 한자 확장-A
CJK Unified Ideographs Extension-A
U+4DC0 ~ U+4DFF 64자 역경 6줄 기호
Yijing Hexagram Symbols
U+4E00 ~ U+9FCF[7] 20,934자 한중일 통합 한자
CJK Unified Ideographs
U+A000 ~ U+A48F 1,168자 이(Yi) 소리 마디
Yi Syllables
U+A490 ~ U+A4CF 64자 이(Yi) 부수
Yi Radicals
U+A4D0 ~ U+A4FF 48자 레이저 문자
Lisu
U+A500 ~ U+A63F 320자 바이어
Vai
U+A640 ~ U+A69F 96자 키릴 자모 확장-B
Cyrillic Extended-B
U+A6A0 ~ U+A6FF 96자 뭄 문자
Bamum
U+A700 ~ U+A71F 32자 어조 조정 문자
Modifier Tone Letters
U+A720 ~ U+A7FF 224자 라틴 확장-D
Latin Extended-D
U+A800 ~ U+A82F 48자 헤티 나가리
Syloti Nagri
U+A830 ~ U+A83F 16자 인도 숫자
Common Indic Number Forms
U+A840 ~ U+A87F 64자 스파 문자
Phags-pa
U+A880 ~ U+A8DF 96자 우라슈트라 문자
Saurashtra
U+A8E0 ~ U+A8FF 32자 데바나가리 확장
Devanagari Extended
U+A900 ~ U+A92F 48자 야리 문자
Kayah Li
U+A930 ~ U+A95F 48자 장 문자
Rejang
U+A960 ~ U+A97F 32자 한글 자모 확장-A
Hangul Jamo Extended-A
U+A980 ~ U+A9DF 96자 자바어
Javanese
U+A9E0 ~ U+A9FF 32자 미얀마어 확장-B
Myanmar Extended-B
U+AA00 ~ U+AA5F 96자
Cham
U+AA60 ~ U+AA7F 32자 미얀마어 확장-A
Myanmar Extended-A
U+AA80 ~ U+AADF 96자 이담어
Tai Viet
U+AAE0 ~ U+AAFF 32자 마니푸르어 확장
Meetei Mayek Extensions
U+AB00 ~ U+AB2F 48자 티오피아어 확장-A
Ethiopic Extended-A
U+AB30 ~ U+AB7F 64자 라틴 확장-E
Latin Extended-E
U+AB80 ~ U+ABBF (64) 미지정 영역
Not Assigned
U+ABC0 ~ U+ABFF 64자 마니푸르어
Meetei Mayek
U+AC00 ~ U+D7AF 11,184자 한글 글자 마디
Hangul Syllables
U+D7B0 ~ U+D7FF 80자 한글 자모 확장-B
Hangul Jamo Extended-B
U+D800 ~ U+DB7F 896자 상위 대체 영역
High Surrogates
U+DB80 ~ U+DBFF 128자 상위 대체 사용자 영역
High Private Use Surrogates
U+DC00 ~ U+DFFF 1,024자 하위 대체 영역
Low Surrogates
U+E000 ~ U+F8FF 6,400자 사용자 영역[8]
Private Use Area
U+F900 ~ U+FAFF 512자 한중일 호환용 한자
CJK Compatibility Ideographs
U+FB00 ~ U+FB4F 80자 영문 표현꼴
Alphabetic Presentation Forms
U+FB50 ~ U+FDFF 688자 아랍어 표현꼴-A
Arabic Presentation Forms-A
U+FE00 ~ U+FE0F 16자 모양 구별 문자
Variation Selectors
U+FE10 ~ U+FE1F 16자 세로쓰기 모양
Vertical Forms
U+FE20 ~ U+FE2F 16자 조합용 반쪽 기호
Combining Half Marks
U+FE30 ~ U+FE4F 32자 한중일 호환용 꼴
CJK Compatibility Forms
U+FE50 ~ U+FE6F 32자 작은꼴 변형
Small Form Variants
U+FE70 ~ U+FEFF 144자 아랍어 표현꼴-B
Arabic Presentation Forms-B
U+FF00 ~ U+FFEF 240자 전각/반각 모양
Halfwidth and Fullwidth Forms
U+FFF0 ~ U+FFFF 16자 특수 제어 문자
Specials
SMP U+10000 ~ U+1007F 128자 선상 B 음절 문자
Linear B Syllabary
4
U+10080 ~ U+100FF 128자 선상 B 상형 문자
Linear B Ideograms
U+10100 ~ U+1013F 64자 에게 숫자
Aegean Numbers
U+10140 ~ U+1018F 80자 그리스 숫자
Ancient Greek Numbers
U+10190 ~ U+101CF 64자 옛 기호
Ancient Symbols
U+101D0 ~ U+101FF 48자 파에스토스 원반 상형 문자
Phaistos Disc
U+10280 ~ U+1029F 32자 키아 문자
Lycian
U+102A0 ~ U+10DFF 64자 리아어
Carian
U+10300 ~ U+1032F 48자 이탈리아 문자
Old Italic
U+10330 ~ U+1034F 32자 딕체 알파벳
Gothic
U+10380 ~ U+1039F 32자 가리트 문자
Ugaritic
U+103A0 ~ U+103DF 64자 페르시아 문자
Old Persian
U+10400 ~ U+1044F 80자 저렛 문자
Deseret
U+10450 ~ U+1047F 48자 우 문자
Shavian
U+10480 ~ U+104AF 48자 스마니아 문자
Osmanya
U+10800 ~ U+1083F 64자 키프로스 음절 문자
Cypriot Syllabary
U+10840 ~ U+1085F 32자 아람어
Imperial Aramaic
U+10900 ~ U+1091F 32자 니키아 문자
Phoenician
U+10920 ~ U+1093F 32자 디아어
Lydian
U+10980 ~ U+1099F 32자 로에 상형문자
Meroitic Hieroglyphs
U+109A0 ~ U+109FF 96자 로에 필기체
Meroitic Cursive
U+10A00 ~ U+10A5F 96자 로슈티
Kharoshthi
U+10A60 ~ U+10A7F 32자 예멘 문자
Old South Arabian
U+10B00 ~ U+10B3F 64자 베스타 문자
Avestan
U+10B40 ~ U+10B5F 32자 르티아 문자
Inscriptional Parthian
U+10B60 ~ U+10B7F 32자 레비 문자
Inscriptional Pahlavi
U+10C00 ~ U+10C4F 80자 돌궐 문자
Old Turkic
U+11000 ~ U+1107F 128자 라흐미 문자
Brahmi
U+11080 ~ U+110CF 80자 이티 문자
Kaithi
U+110D0 ~ U+110FF 48자 라어
Sora Sompeng
U+11100 ~ U+1114F 80자 크마 문자
Chakma
U+11180 ~ U+111DF 96자 라다 문자
Sharada
U+11680 ~ U+116CF 80자 크리 문자
Takri
U+12000 ~ U+123FF 1,024자 쐐기 문자
Cuneiform
U+12400 ~ U+1247F 128자 쐐기 문자 숫자·문장 부호
Cuneiform Numbers and Punctuation
U+13000 ~ U+1342F 1,072자 이집트 상형문자
Egyptian Hieroglyphs
U+16800 ~ U+16A3F 576자 뭄 문자 보충
Bamum Supplement
U+16F00 ~ U+16F9F 160자
Miao
U+1B000 ~ U+1B0FF 256자 가나 보충
Kana Supplement
U+1D000 ~ U+1D0FF 256자 잔틴 시대용 기호
Byzantine Musical Symbols
U+1D100 ~ U+1D1FF 256자 용 기호
Musical Symbols
U+1D200 ~ U+1D24F 80자 고대 그리스 시대의 용 기호
Ancient Greek Musical Notation
U+1D300 ~ U+1D35F 96자 현경 기호
Tai Xuan Jing Symbols
U+1D360 ~ U+1D37F 32자 가지
Counting Rod Numerals
U+1D400 ~ U+1D7FF 1,024자 수학식에서 쓰이는 알파벳
Mathematical Alphanumeric Symbols
U+1EE00 ~ U+1EEFF 256자 수학식에서 쓰이는 아랍 문자
Arabic Mathematical Alphabetic Symbols
U+1F000 ~ U+1F02F 48자 마작
Mahjong Tiles
U+1F030 ~ U+1F09F 112자 도미노
Domino Tiles
U+1F0A0 ~ U+1F0FF 96자 플레잉 카드
Playing Cards
U+1F100 ~ U+1F1FF 256자 괄호 문자 보충
Enclosed Alphanumeric Supplement
U+1F200 ~ U+1F2FF 256자 괄호 한자 보충
Enclosed Ideographic Supplement
U+1F300 ~ U+1F5FF 768자 모지
Miscellaneous Symbols And Pictographs
U+1F600 ~ U+1F64F 80자 이모티콘
Emoticons
U+1F680 ~ U+1F6FF 128자 지도 기호
Transport And Map Symbols
U+1F700 ~ U+1F77F 128자 연금술 기호
Alchemical Symbols
SIP U+20000 ~ U+2A6DF 42,720자 한중일 통합 한자 확장-B
CJK Unified Ideographs Extension B
U+2A700 ~ U+2B73F 4,160자 한중일 통합 한자 확장-C
CJK Unified Ideographs Extension C
U+2B740 ~ U+2B81F 224자 한중일 통합 한자 확장-D
CJK Unified Ideographs Extension D
U+2F800 ~ U+2FA1F 544자 한중일 호환용 한자 보충
CJK Compatibility Ideographs Supplement
SSP U+E0000 ~ U+E007F 128자 태그
Tags
U+E0100 ~ U+E01EF 240자 모양 구별 문자 보충
Variation Selectors Supplement
PUA U+F0000 ~ U+FFFFF 65,536자 사용자 영역 보충-A
Supplementary Private Use Area-A
U+100000 ~ U+10FFFF 65,536자 사용자 영역 보충-B
Supplementary Private Use Area-B
BMP 내 글자 보기(영문)
SMP 내 글자 보기(영문)
SIP 내 글자 보기(영문)
TIP 내 글자 보기(영문)
SSP 내 글자 보기(영문)

4.1. 유니코드와 한글


유니코드에서 한글은 한자[9] 다음으로 많은 코드를 차지하고 있는 문자이다. 이것은 동아시아권에서 사용하는 문자로서는 두 번째로 많은 영역을 차지하는 것이다. 그런데 한자는 한중일월이 모두 함께 쓰는 문자라는 점을 고려하면, 한글은 사용자 대비 문자 수로서는 엄청나게 높은 이득을 차지하고 있는 것이다. 혐한들이 여기에 열폭해서 맨날 까댄다.(…)

왜 저렇게 많냐면 현대 한국어 음절 조합과 한글 자모를 모두 집어넣었기 때문이다. 한글의 경우, 현대 한국어의 자모 조합으로 나타낼 수 있는 모든 완성형 한글 11,172자(가, 각, 갂, 갃, …, 힠, 힡, 힢, 힣)이 모두 들어가 있다. 그래서 이나 처럼 KS X 1001에서는 쓸 수 없는 글자들도 전혀 문제없이 쓸 수 있다.

또한 U+1100 ~ U+11FF, U+A960 ~ U+A97F, U+D7B0 ~ U+D7FF에 배당된 한글 자모는 한글을 조합형으로 구현할 수 있게 초·중·종성을 일일이 배당한 것이며, 여기에는 옛한글 낱자들도 같이 포함되어 있다. 그래서 ᄒᆞᆫ과 같은 옛한글도 옛한글 전용 글꼴만 있으면 문제없이 쓸 수 있다.

따라서 유니코드 환경이라면 현대 한글은 완성형으로도 조합형으로도 표현할 수 있지만, 조합형은 데이터 크기가 2~3배로 커지기 때문에 별로 사용되지 않는다. 보통 조합형은 옛한글을 표현할 때 쓰인다. 옛한글을 완성형으로 하나하나 배당하면 유니코드 전체를 뒤덮고도 남기 때문에 조합형으로 표현할 수밖에 없다.[10]

4.1.1. 한글 전산화의 잔혹사(?)

대한민국의 한국어 컴퓨터 환경에서는 유니코드가 도입되기 전에는 KS X 1001(완성형)이라는 코드와 이에 기반한 EUC-KR 인코딩을 사용하였다. 그러나 완성형의 한글 글자 수는 2,350자로, 현대 한글이 표현할 수 있는 글자 중 빈도수가 높은 일부분만 수록되어 있는 상태였다. 이것 때문에 쿈이라 쓰지 못하는 일이 있기도 했다. 이를 해결한 CP949/UHC(통합 완성형)라는 코드도 있는데 완성형에 없는 글자를 억지로 구겨넣었기 때문에 코드가 자모순으로 구성되지 않을 뿐만 아니라 코드 표준에 맞지 않게 구현한 프로그램이 많아서 자잘한 문제가 많았다.

유니코드는 1991년 발표된 1.0 버전부터 한글을 지원하였다. 그러나 1993년 발표된 1.1 버전까지만 해도 현대 한글 11,172자 전부를 포함하지는 않았다.[11] 게다가 1.1 버전의 한글은 배열 순서가 CP949/UHC보다도 개판이었고 나머지 4,516자를 추가하려고 해도 제대로 추가할 수가 없었다.

그래서 대한민국 대표는 유니코드 2.0 제정 시 현대 한글 11,172자를 가나다순으로 새 영역에 배당할 것을 요청했다. 이때 각국 대표들 사이에서 논쟁이 오갔지만, 결국 대한민국 대표의 요청이 받아들여져서 1996년 발표된 유니코드 2.0에서 1.1 때까지 U+3400 ~ U+4DFF[12]에 배당돼 있던 한글 6,656자를 없애고 새 영역(U+AC00 ~ U+D7A3)에 가나다순으로 11,172자를 배당했다. 그리고 이 '한글 대이동 사건'을 계기로 2.0부터는 한 번 배당한 문자는 절대 옮기거나 없애지 않는다는 정책을 세웠다. 그리고 이렇게 배당된 11172자가 2.0부터 현재까지 한글·한국어 처리에 쓰이고 있다. 이로 인해 유니코드 2.0 이상과 그 이전 버전은 서로 호환되지 않는데, 혐한들은 트집 잡을 게 없어서 또 이걸 트집 잡는다(…).

당연하게도 이 11,172자는 남한의 가나다순[13]으로 배당되었다. 북한이 이것을 문제삼아 이 11172자를 북한식으로 재배열해 줄 것을 2000년경에 요구했으나, 이미 한글은 코드 위치가 한 번 대이동한 전례도 있고 문자를 절대 옮기거나 없애지 않는다는 정책에도 위배되기 때문에 보기 좋게 씹혔다. 그래서 북한은 울며 겨자 먹기로 남한 순으로 배당된 11172자를 쓰고 있다. 대한민국 대표가 11172자를 배당받을 수 있게 노력한 것만으로도 감사해야지, 그걸 또 북한 순으로 재배열해 달라니, 천하의 개쌍놈들 이것만이 아니라 자기들이 우상화 목적으로 문자 코드에 집어넣은 김일성, 김정일의 이름 표기에 쓰이는 "특수 문자"[14]들도 그대로 유니코드에 넣고자 했으나 당연히 퇴짜맞았다. 문화어 참조.

한때 북한에서는 남한 가나다순으로 배당된 유니코드의 한글 영역이 마음에 안 들어서 자기네들 순서를 기준으로 한글 영역을 쓴 적이 있었다. 남북한 한글 코드의 충돌 문제 항목 참고.

그리고 북한은 코드 순으로 정렬하면 북한식으로 제대로 정렬이 되지 않는다는 것도 문제삼았지만, 단순 코드 순 정렬은 어차피 그 어떤 언어에서도 적절하지 않으며, 정렬은 따로 테이블을 만들어서 해야 한다. 영어조차도 코드 순으로 정렬하면 대문자 Z가 소문자 a보다 앞에 온다.

4.1.2. 조합형 낱자들로 만들 수 있는 한글 완성자의 수

유니코드에 있는 모든 한글 낱자는 다음과 같다. 자음의 경우 위의 것이 초성, 아래의 것이 종성이다.

UnicodeHangulJamoInOrder.png
[PNG 그림 (375.28 KB)]


일단 단순 계산으로만 125×95×138=1638750자가 나온다(!). 여기서 125, 95, 138은 각각 초성, 중성, 종성이 비어 있는 경우도 포함한 수치이다. 즉 '가'와 같이 종성이 없는 글자도, 'ᅟᅡᆫ'과 같이 초성이 없는 글자도(실제로 중성과 종성만으로 이뤄진 글자도 문헌에 있다), 'ᄒᅠᆫ'과 같이 중성이 없는 글자도 들어간 것이다.

다만, 여기서 다음 수만큼 빼야 한다.
  • 1: 1638750자 중에서 한 글자는 초성, 중성, 종성이 모두 없는 글자이다. 즉 그냥 단순한 공백과 다를 바가 없다.
  • 16988: 초성과 종성만으로 이뤄진 글자. 대한민국의 KS X 1026-1 규격(정보교환용 한글 처리지침)은 'ᄒᅠᆫ'과 같은 초성과 종성만의 결합은 허용하지 않는다. 즉 124×1×137=16988자가 된다.
즉 KS X 1026-1 규격상으로 허용되는 모든 한글 완성자는 1638750−(1+16988)=1621761자가 된다.

만약 초성, 중성, 종성 중 한 성분만으로 이뤄진 것을 단순히 낱자로 치고 완성자로 치지 않는다면, 다음 수만큼 빼야 할 것이다.
  • 124: 초성만으로 이뤄진 글자 124×1×1
  • 94: 중성만으로 이뤄진 글자 1×94×1
  • 137: 종성만으로 이뤄진 글자 1×1×137
즉 초성, 중성, 종성 중 두 성분 이상으로 이뤄진 것만을 셀 경우, 1621761−(124+94+137)=1621406자가 될 것이다. 만약 초성, 중성, 종성 중 두 성분 이상으로 이뤄진 것에다가 초성과 종성만의 결합도 포함한다면 1638749−(124+94+137)=1638394자가 될 것이다.

물론 어디까지나 '이론적으로' 160만 자 정도 나오는 것이고, 실제로 고문헌에 등장하는 글자 수는 5천여 자 정도밖에 안 된다고 한다. 현대 한글 낱자로 조합 가능한 11172자 중에서 실제로 쓰이는 건 2천 ~ 3천 자 정도밖에 안 되는 것과 비슷하다고 보면 된다.

4.2. 유니코드와 한자

다른 이슈는 추가바람.

4.2.1. 한중일 통합 한자와 한중일 호환용 한자의 차이

유니코드에서 가장 많은 코드를 점유하고 있는 문자는 한자이다. 일반적으로 쓰이는 것은 한중일 통합 한자 및 그 확장판들이며, 웬만하면 이 코드만 사용하는 것이 권장된다. 그러나 동아시아의 기존 국가 표준 인코딩에서는 동일한 한자에 중복된 코드가 할당돼 있는 경우가 있어서 이들을 한중일 호환용 한자에 수록하였다. 실수로 중복 배당된 문자(대만 Big5 코드에 중복 배당된 두 글자), 일부러 중복시킨 문자(대한민국 KS 코드[15], 일본의 IBM 확장 한자와 일부 JIS X 0213 한자[16]) 등이 한중일 호환용 한자에 들어갔다. 한중일 호환용 한자는 기존 동아시아 문자 코드와 왕복 변환을 위해 마련되었다.

호환용 문자는 다른 코드 체계와의 왕복 변환이 필요하지 않을 경우 웬만하면 안 쓰는 게 깔끔하기 때문에, 일부 소프트웨어는 한중일 호환용 한자가 입력되면 자동으로 거기에 해당되는 한중일 통합 한자로 자동 변환되는 기능을 내장하기도 한다.

4.2.2. 미세한 이체자 처리 문제

현재 한자는 나라마다 표준이 다른데, 모양이 많이 다른 이체자[17]들은 각각 코드를 할당해 주고 있다. 예를 들어 '나라 국' 자의 경우 國과 国이 각각 다른 코드를 가진다.

문제는 모양이 크게 안 다른 이체자를 이체자로 인정할까 말까 하는 것인데, 이 중에 일부는 그냥 한 코드로 합병한 경우가 많다. 예를 들어 '평평할 평'(平) 자의 경우 干에다 八을 덧붙인 듯한 자형도 있고, 干에다 ソ를 덧붙인 듯한 자형도 있는데, 둘 다 U+5E73으로 하되 구체적인 형태는 폰트에 따라 구분하게 하고 있다.[18][19] 결국 언어마다 선호하는 한자의 형태가 조금씩 다르기 때문에, 번거롭더라도 각 언어에 맞는 폰트 지정까지 해줘야 적합한 렌더링을 보장할 수 있을 것이다. 참고할 만한 글

그런데 이렇게 폰트를 통해 이체자 처리를 할 경우 폰트 지정이 곤란한 텍스트 문서에서는 구분이 불가능한 문제가 생긴다. 특히 일본의 경우 호적 전산화 등에서 이체자 처리를 정밀하게 하고 있어서 폰트를 지정하지 않고 문자 코드만 사용하여 이체자를 정확히 변별할 수 있는 기술에 대한 수요가 있는 상황[20][21]이다. 그래서 유니코드에서도 뒤늦게 이에 대응되는 기술의 필요성이 대두되어 현재 유니코드 내에 이체자 선택자(Ideographic Variation Selector, IVS)[22]라는 특수 문자 코드를 덧붙이는 방법도 도입돼 있고, 계속 구체적인 표준을 정하기 위해 작업 중인 듯하다. 이 방식은 한자용 문자와 IVS(화면상에 개별 문자로 표시되진 않음)를 연달아 입력하면 화면에 의도한 한자 한 글자가 지정한 이체자대로 표시되게 하는 식이다. 코드 상으로는 문자를 2개 입력했지만 실제 화면에는 1글자로 보이는 식.[23]

그러나 아직은 많은 소프트웨어·폰트들이 IVS에 대응되지 못하고 있는 상황인 데다가 IVS를 이용한 이체자 처리 규격 자체도 불완전한 상태이다. IVS 출력이 확실한 경우라면 상관 없겠지만, IVS 지원이 미흡한 기종에서도 열어볼 가능성이 큰 문서를 작성할 경우 이 방식의 사용을 지양하는 게 좋을 듯하다. 정 이체자를 정확히 표기해야 한다면 IVS 없이 해당 국가용으로 제작된 폰트로 지정해준다든가, 그것도 정상 작동을 보장할 수 없을 것 같으면 이미지 파일을 동원하는 게 좋을 듯하다. 참고로 현재까지 유니코드에 포섭된 IVS를 대부분 지원하는 폰트들은 여기(일본어)를 참고할 것.

이런 이체자들을 정리하는 사이트들도 있는데 그 중 하나가 글리프위키(일본어)라는 사이트이다.[24] 역시 일본의 이체자 전산화는 세계 제이이이이이이이이이이이이이일!! 일본어로 된 사이트이지만 한국어를 비롯한 다른 언어로 된 안내문들이 만들어져 있고() 회원 가입 시 옵션에서 일본어 외 다른 언어로 시스템 메시지를 바꿀 순 있다(현재 한국어 지원 중).

5. 유니코드의 인코딩

유니코드 인코딩은 UTF-8, UTF-16, UTF-32 등이 있다.

5.1. UTF-8

가장 많이 사용하는 유니코드 인코딩이다. UTF-16 인코딩을 사용하면 1바이트로도 표현할 수 있는 문자에 그보다 더 많은 바이트를 소비해야 하는데, UTF-8 인코딩을 사용하면 그런 문제점이 없다. 그러나 한자나 한글은 주로 3바이트 영역에 집중되어 있기 때문에 한자와 한글이 많이 포함되어 있는 문서는 오히려 크기가 커진다. 그럼에도 불구하고 세계적으로는 UTF-8 인코딩이 가장 널리 쓰이기 때문에 유니코드를 지원하는 대부분의 프로그램들은 일단 UTF-8을 디폴트 상태로 지정해 주는 경우가 많다. 게다가 UTF-8의 Latin-1 영역은 ISO/IEC 8859-1이라고 부르는 8비트짜리 서유럽 코드와 완벽히 호환된다는 장점이 있다. 웹 등지에서 유니코드 적용이 서구권을 중심으로 퍼졌기에 서구권 입장에서는 기존 8비트 코드와 호환성이 있는 UTF-8을 많이 선택했고, 결국 이것이 대세가 된 것이다.

UTF-8 인코딩의 특징은 1~4 바이트[25][26]가변 길이를 가지는 멀티바이트 캐릭터 형식이라는 점이다. 때문에 아스키 코드와 하위 호환성을 가진다. 아스키 코드의 0~127까지는 UTF-8로 완전히 동일하게 기록된다.

UTF-8은 엄밀히 따지면 유니코드의 데이터를 전송하기 위한 규격이지 문자 코드가 아니다.[27] 하지만 대부분의 문자 코드가 전송 규격으로서의 의미를 가지고 있기 때문에 문자 코드로 유용을 하고 있는 것 뿐이다.[28] 따라서 MS 계열 프레임워크에서 (VC++ 등등) 비 유니코드의 멀티바이트 캐릭터를 UTF-8 형식으로 변환하기 위해서는 와이드바이트 형식의 완전 2바이트 유니코드로 변환한 다음 다시 UTF-8 플래그를 주어 멀티바이트 형식으로 두 번 변환하는 과정이 필요하다. 그리고 Linux와 같은 MS 프레임워크 이외의 플랫폼에서도 명시적이지만 않을 뿐이지 내부적으로 유니코드로 변환한 후 처리되는 과정이 포함되어 있다.

한글 단어가 UTF-8 형식으로 어떻게 나올 것인지 궁금하다면 메모장과 같은 텍스트 에디터로 단어를 써서 UTF-8 형식으로 저장한 후 헥스 에디터를 이용하여 보면 된다. 다만 메모장을 쓸 경우 헥스 에디터로 열었을 때 EF BB BF라는 문자가 파일 가장 앞에 붙는다. 이것을 BOM(byte order mark)이라고 하는데 이건 빼고 그 뒤부터 보면 된다.[29][30] 해독할 때는 퍼센트 기호를 빼고 헥스 에디터에 그대로 쓴 다음 저장한 뒤 텍스트 에디터로 읽으면 된다. BOM은 각각 몇 가지 종류가 있고, 파일에 BOM이 써질 수도 있고 안 써질 수도 있으며, 유닉스/리눅스 계열에서는 쓰지 않는것이 관례라고 하니까 상황에 맞게 코딩을 하는 것이 필요하다. 특히 웹 프로그래밍을 할 때는 BOM을 안 쓰는데, 소스 코드 파일 여러개가 합쳐져서 하나의 웹 페이지를 구성하는 경우가 많다보니 BOM이 있으면 파일이 합쳐질 때 코드를 잘못 인식해서 에러가 나기 때문이다.

한글 페이지를 일본어 인코딩으로 해석하거나, 그 반대의 경우 등은 UTF-8이 아닌, 각 국가별 인코딩(EUC-KR, Shift-JIS 등)을 사용해서 발생하는 경우가 많다(물론 유니코드 페이지도 다른 인코딩으로 지정하면 깨진다).

웹 페이지에서 인코딩 선언을 해주는 건 기본 중의 기본임에도 불구하고, 그 기본을 지키지 않아서 글자가 깨지는 문제로 사용자가 수동으로 인코딩을 지정하게 하는 경우가 많다. 웹 페이지의 소스를 보면 <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 이렇게 적힌 부분이 있는데 여기서 charset=UTF-8 부분이 인코딩 선언이다.[31] 어떤 웹 페이지에는 저 UTF-8 대신에 EUC-KR이 적혀있기도 하다.[32]HTML 5부터는 <meta charset="UTF-8" />와 같이 간단하게 쓸 수도 있다.

5.2. UTF-16

UTF-16은 도스 기반(95,98,ME)이 아닌 Microsoft Windows가 사용하는 기본 인코딩이다. 그래서 어플리케이션이 유니코드로 문자열을 처리하지 않거나 UTF-8을 사용하더라도, 윈도 내부적으로 UTF-16 형식으로 변환한다. 상당수의 일본 비주얼 노블을 한국어 로캘에서 실행하면 글자가 깨지는 이유가 바로 이런 구조 때문인데, 변환하기 전의 코드가 한국어 애플리케이션과 다르기 때문이다. 그렇기에 윈도 API에서는 멀티바이트가 아니라 와이드캐릭터로 소프트웨어를 개발할 것을 강조하며, 최근의 비주얼 C++에서는 프로젝트를 새로 생성하면 기본적으로 와이드캐릭터로 빌드된다. .NET이나 자바의 경우에는 프레임워크단에서 와이드캐릭터를 사용하기 때문에 큰 문제가 없다. 메모장에서 파일을 저장할 때 유니코드라고 써있는 인코딩이 UTF-16이다.[33]

참고로 UTF-16이 글자 하나에 항상 2바이트인 것으로 알고 있는 사람이 있는데, UTF-8과 마찬가지로 가변 길이다. 일반적인 이용에서 U+10000부터의 문자를 접할 일이 별로 없어서 대부분 2바이트로 표시할 수 있기 때문에 그런 인식이 퍼져 있을 뿐. U+10000 및 이후의 문자는 값에서 U+10000을 뺀 후 문자값을 10비트씩 쪼갠 후 각각 U+D800, U+DC00의 하위 10비트에 끼워 넣는 식으로 총 4바이트로 표현한다. 코드 중간에 '상위/하위 대체 영역'이라는 문자가 정의되지 않은 부분이 있는 것이 이를 위한 것이다. 이 방법을 이용하면 U+10000부터 U+10FFFF까지 4바이트를 이용하여 표현할 수 있다.

이 부분에 대해서는 논의의 여지가 있는데, 엄밀히 말해 Microsoft Windows의 기본 인코딩은 UTF-16이 아니라 UCS-2에 기반한다. UCS는 Unicode 이전에 사용되는 국제 인코딩 규격으로 'International Standard ISO/IEC 10646'에 정의되어 있다. UCS-2는 UTF-16에 대응되는 규격으로 U+FFFF까지는 UTF-16과 동일하나, 가변길이 부호화를 지원하지 않으므로 U+10000 이후의 문자열을 사용할 수 없다. 위에서 언급된 와이드캐릭터 역시 2바이트로 가변바이트가 아니다. 이는 Microsoft가 일부러 규격을 어겼다기보다는, 가변길이 부호처리시 연산속도 저하가 발생한는 점을 고려했다는 측면에서 이해할 수 있다. 또한 U+10000이상의 영역에 대해 처리가 완전히 불가능한 것은 아닌데, 이 때는 와이드캐릭터 2개를 사용하여 처리한다. 더 최신의 정보에 대해서는 추가바람

6. 유니코드 지원 폰트

유니코드를 바탕으로 각종 문자들을 지원하는 폰트에 대한 정보는 백괴사전윤희코드 특수문자 도움말이 상세하게 되어 있으니 관심있는 사람들은 찾아 보기 바란다. 백괴사전에서 백괴사전:, 도움말:로 시작하는 문서는 각종 드립이 생략된 순수 정보 제공 문서이다.

7. 개별 항목이 있는 유니코드 문자

폰에선 누르기 힘들다
  • ! (U+0021)
  • % (U+0025)
  • & (U+0026)
  • * (U+002A)
  • , (U+002C)
  • - (U+002D)
  • . (U+002E)
  • / (U+002F)
  • ; (U+003B)
  • ? (U+003F)
  • @ (U+0040)
  • \ (U+005C)
  • ~ (U+007E)
  • NBSP (U+00A0)
  • SHY (U+00AD)
  • · (U+00B7)
  • RLO (U+202E)
  • (U+2030)
  • (U+2207)
  • (U+2468)
  • (U+2606)
  • (U+2661)
  • (U+3005)
  • (U+318D)
  • (U+327E)
  • BOM (U+FEFF)

----
  • [1] 주로 네 자리로 표기한다.
  • [2] SIP와 SSP 사이에 TIP라는 영역이 정의되어 있지만, 아직 여기에 속하는 글자가 없다.
  • [3] 2013년 5월 기준으로 6.2 버전이다.
  • [4] 아스키 코드와 완벽히 호환되기 때문에 영미권 사용자는 일찌감치 UTF-8로 갈아탔다. 덕분에 애먼 동양권 사용자만 새됐다
  • [5] 정확한 번역은 라틴 기본 '문자'. 언어와 문자는 다르다. 이하 무슨무슨어(語)로 번역되어 있는 것도 무슨 문자로 고쳐 보아야 한다.
  • [6] 옛한글이 포함된 조합형
  • [7] 유니코드 1.0에 U+4E00(一)부터 U+9FA5(?)가 처음으로 배당된 뒤, 유니코드 4.1부터 6.1까지 U+9FA6(?)부터 U+9FCC(?)에 새로 문자가 추가됐는데, 이 추가된 부분은 자주 무시당한다(…). 추가할 한자 수가 적으면 새로 한자 확장 영역을 만들지 않고 그냥 여기다가 몇 글자씩 추가하는 듯하다.
  • [8] 말 그대로, 글꼴 제작자의 입맛에 따라 어떤 글자를 넣어도 터치를 안 하는 영역이다. 그래서 이 부분은 보통 비어 있다.
  • [9] 유니코드에 등록된 한자는 무려 7만 자가 넘는다.
  • [10] 한글의 특성상 자모 하나가 추가되면 조합 가능한 글자 수는 배로 늘어나고, 실제로 유니코드에 배당된 조합형 낱자들로 조합 가능한 글자 수는 백만 개 이상이다. 실현된다면 한자를 능가하는 민폐
  • [11] 1.0 때 KS X 1001의 2,350자, 1.1 때 잡다한 4,306자를 추가해 6,656자가 수록되어 있었다.
  • [12] 현재 이 부분에는 한자(...)가 들어있다.
  • [13] 남한과 북한은 한글 낱자의 정렬 순서가 다르다. 남한은 광복 이전부터 쓰던 것을 그대로 쓰고 있지만, 북한은 자체적으로 순서를 새로 짠 것이다. 굳이 정통을 따지자면 남한이 정통인 셈.
  • [14] 김,일,성,김,정,일,김,정,은. 일반적인 글자와 글꼴이 다르다.
  • [15] 자주 쓰이는 한자가 음이 여러 개 있을 경우 발음에 따라 한자를 중복 할당했다(완성형/중복 한자 참고). 유니코드에서는 중복된 글자들 중 하나만 대표로 한중일 통합 한자에 대응시키고, 나머지는 한중일 호환용 한자에 대응시켰다.
  • [16] 획에 미세한 차이만 있는 이체자 몇 가지를 중복 수록했는데, 그 중에 너무 미세한 차이만 있는 경우 또는 이미 통합 한자에서 통합된 글자는 유니코드에서 한중일 호환용 한자에 대응시켰다.
  • [17] 훈·음은 같지만 형태가 다른 한자.
  • [18] 이렇게 비슷하게 생긴 문자를 같은 코드로 병합하고 폰트에 따라 알아서 만들게 하는 경우는 한자 외에도 있다. 예를 들어 말 줄임표로 쓰는 점 세 개(…, U+2026)의 경우, 동아시아 언어용으로 제작된 폰트들은 거의 다 가운뎃점(·)이 세 개가 연달아 있는 형태로 렌더링되지만, 서양 언어용으로 제작된 폰트에서는 그냥 점(.) 세 개가 연달아 있는 형태로 렌더링되는 경우가 많다.
  • [19] 단, 이런 식으로 차이가 크지 않은 이체자들을 한 코드로 합병하여 한중일 통합 한자에 추가한 글자 중에는, 그 글자에 대응되는 일부 이체자를 위해 한중일 호환용 한자에 중복 추가한 경우도 있다(주로, 일본 문자코드 내에 등록된, 자형이 비슷한 이체자와의 왕복 변환을 위해 할당됨). 예를 들어 '바다 해' 자의 경우 한중일 통합 한자에 海(U+6D77)가 등록돼 있는데, 이 글자의 마지막 구성요소가 母(어미 모) 형태로 렌더링돼도 되고(한국어, 중국어 정체·간체, 일본 구자체) 毋(말 무) 형태로 렌더링돼도 된다(일본 신자체). 그래서 Windows에서 한국어·중국어(정체/간체) 입력기로 바다 해를 입력하든 일본어(신자체) 입력기로 바다 해를 입력하든 유니코드의 海(U+6D77)에 해당되는 문자가 입력되며 글자 형태는 폰트에 따라 결정되므로, 언어별 폰트를 적절히 지정해 줘야 해당 언어에 적절한 한자체로 표시된다. 반면에 한중일 호환용 한자에 추가된 海(U+FA45)는 해당 부분이 반드시 母(어미 모)의 형태로 렌더링돼야 한다. 한중일 호환용 한자의 海(U+FA45)는 본래 일본 문자 코드에서 구자체를 정확히 렌더링할 때를 위해 추가된 '바다 해' 자와 연동돼 있는 듯한데, 꼭 필요한 경우가 아니라면 사용하지 않는 게 좋을 듯 하다.
  • [20] 국가 표준은 아니지만 일본 일각에서 쓰이고 있는 몇몇 문자 코드 체계(예를 들면 TRON 코드#석문자경# 등)들은 유니코드에서 다른 코드로 할당하지 않는 미세한 이체자들을 별도의 문자 코드로 할당한다.
  • [21] 일본인들은 다른 나라 사람들보다 자잘한 부분까지 꼼꼼하게 준비하는 성격이 강하다. 축소지향적 일본인이라는 표현이 괜히 나온 게 아니다. 그러다 보니 다른 나라에서는 수요가 크지 않은 이체자의 세밀한 전산화에 대한 수요가 어느 정도 있고 관련 제품들도 거의 일본제가 많다.
  • [22] 유니코드 컨소시엄의 설명(영어), 일본어 위키백과의 설명. 확실히 이체자 전산화에 일본인들의 관심이 지대하다는 점이 위키백과에서도 확인된다. 2008년에 일본어판에서는 위키백과 내에서 처음으로 IVS에 대한 독립적인 위키백과 문서를 신설했다. 그리고 2014년 11월 현재 일본어판 위키백과의 IVS 문서는 내용이 매우 상세한 상태인데 다른 언어판으로는 독립적인 IVS 문서가 아예 없는 상황이다. 일본어판 혼자 IVS 문서가 있으면서 내용이 상세하기까지 하니 이 부분에 대한 일본인들의 관심이 얼마나 큰지 짐작할 수 있다.
  • [23] 이렇게 여러 문자를 한데 조합해서 출력해주는 방식은 한자 외의 문자에도 여럿 있다. 악센트 기호가 붙은 라틴 문자를 종종 이런 방식으로 입력하기도 한다.
  • [24] 각 이체자(글리프)마다 문서를 만드는데 문서 제목은 유니코드의 고유 코드를 기준으로 한다. 하지만 아직 유니코드에 수록되지 않은 자형들도 한데 정리한다. 참고로 이 사이트는 미디어위키를 수정한 엔진을 사용하는 위키위키 사이트이다.
  • [25] 한글은 주로 3바이트 구간에 존재. 이 때문에 EUC-KR로 작성된 한글이 많은 웹페이지나 텍스트 문서를 UTF-8로 변환하면 데이터 크기가 늘어나는 것을 볼 수 있다. 2바이트가 3바이트가 되면서 글자 하나당 데이터 크기가 1.5배가 되기 때문이다.
  • [26] UTF-8로 표현 가능한 길이는 최대 6바이트지만, 다른 인코딩과의 호환을 위해 4바이트의 절반까지 길이를 제한 하였다. 어차피 유니코드는 U+10FFFF까지만 이용하기 때문에 4바이트면 충분하다.
  • [27] UTF 자체가 유니코드 전송 형식(Unicode Transfer Format)이라는 뜻이다.
  • [28] 같은 의미로 UTF-16도 전송 규격이지만 이 규격이 실제 유니코드의 BMP0과 완전히 일치한다.
  • [29] 다만 서버사이드 스크립트에서 헤더 요청을 할 때에는 상황이 달라진다. 보통 헤더 요청(주로 로그인 상태 유지를 위한 세션에 쓰임)은 출력이 있기 이전에 처리되어야 하는 사항인데, BOM이 있으면 그것이 출력이 되어 버리기 때문에 헤더 요청이 전부 도로아미타불이 되어버린다(…) 덤으로 에러 메시지의 향연이 펼쳐진다 더욱이 BOM은 보이지도 않는다! 그래서 서버사이드 스크립트는 절대로 메모장으로 작업하지 않는다.
  • [30] UTF-8이 아닌 유니코드 자체의 BOM은 FE FF 또는 CPU 정렬 방식에 따라 FF FE가 될 수 있다.
  • [31] text/html 대신에 application/xhtml+xml 이 적힌 곳도 있고 아예 다른 게 있을 수도 있다.
  • [32] 옛날에 출판된 HTML 4.1용 입문서에선 meta 코드 자체가 책 후반부에 나와있어 인코딩선언을 나중에야 배운다거나 나오더라도 선언에 euc_kr을 사용하는 예제거 많았다. 2000년대 후반에도 뷁이나 햏이 깨지는 사이트들이 간간히 있었다
  • [33] 정확히 말하면 UTF-16, Little Endian, BOM
  • [34] 문서에서 뜬금없이 드립 소재로 나오는 경우가 많다. 백괴사전에서는 유니코드를 윤희 황제가 창시한 '윤희코드'라고 부른다(..)
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2015-04-13 17:30:15
Processing time 0.0038 sec