본문 바로가기

IT

[C#] UTF-16의 캐릭터 크기에 대한 간단한 탐구



안녕하세요,

러시아에 살고 있는 개발자 윤진입니다.


C#을 비롯한 .Net 플랫폼에서는 문자를 인코딩하는 방식으로,

Unicode Transformation Format인 UTF-16을 사용합니다.


UTF-16은 기본적으로 16비트-2바이트를 취하지만, 항상 2바이트는 아닙니다.

사상되는 문자의 종류에 따라 4바이트로 확장되기도 합니다.


2바이트로 표현되는 영역은 U+0000부터 U+FFFF까지입니다.

U+0000은 제어 문자와 라틴 기본 영역에 속해있죠.

U+0000 ~ U+007F

128자

제어 문자와 라틴 기본

U+FFFF는 특수 제어 문자 영역에 속해있습니다.

U+FFF0 ~ U+FFFF

16자

특수 제어 문자            


그렇다면, 4바이트 사상되는 U+000000~ 코드 이상의 문자는 무엇을 보고 4바이트 문자인지 판별할 수 있을까요?

이는 2바이트 영역 내에 예약되어있는 '대체 영역' 코드를 통해서입니다.


UTF 코드에는 상위/하위 대체영역으로 두 영역이 할당되어 있습니다.

U+D800 ~ U+DB7F

   896자

상위 대체 영역       


U+DC00 ~ U+DFFF

1,024자

하위 대체 영역       

캐릭터 코드 2바이트를 읽을때 U+D800~U+DB7F 영역을 의미하는 비트 '1101 1000'이 나오면,

해당 캐릭터는 2바이트가 아닌 4바이트짜리 캐릭터로 인지됩니다.

그 다음 2바이트는 U+DC00~U+DFFF 영역을 의미하는 비트 '1101 1100'로 시작해야합니다.

그렇다면 제대로 된 4바이트짜리 UTF-16 문자가 완성되는 것입니다.


위키피디아의 예시를 보면 보다 명확하게 이해가 가는데,

U+104370001 0000 0100 0011 01111101 1000 0000 0001 1101 1100 0011 0111

2바이트 영역으로 표현할 수 없는 U+10437 유니코드를 비트로 풀어쓰면,

'0001 0000 0100 0011 0111'로 표현할 수 있습니다.

위의 20비트를 정확히 반으로 갈라서 10비트씩으로 나눕니다.

그리고 앞의 10비트는 상위 대체 영역 비트인 '1101 10'의 뒤에 붙이고,

뒤의 10비트는 하위 대체 영역 비트인 '1101 11'의 뒤에 붙입니다.


U+10000 이상의 영역에 속한 문자는 옛 그리스 문자, 옛 페르시아 문자, 페니키아 문자 등

지금은 거의 사용하지 않는 문자의 영역이지만,

U+1F600 ~ U+1F64F

80자

이모티콘

이모티콘이나 한중일 통합 한자 확장 영역 같은 경우에는 쓸 일이 있을지도 모릅니다.


UTF-16으로 표현할 수 있는 문자수는,

20비트의 공간에 채울 수 있는 1,048,576개의 문자입니다.

아직은 빈공간이 군데군데 보이지만, 언젠가는 꽉 찰지도 모를 일입니다.

유니코드 공식홈페이지에서 현재까지 채워져 있는 유니코드 테이블을 가져다 붙여보겠습니다.


 0123456789ABCDEF
100Linear B SyllabaryLinear B Ideograms
101Aegean NumbersAncient Greek NumbersAncient SymbolsPhaistos Disc
102(Iberian)???LycianCarianCoptic Ep №
103Old ItalicGothicOld PermicUgariticOld Persian¿ShavianQS?
104DeseretShavianOsmanyaOsage
105ElbasanCauc. Albanian¿Veqilharxhi (Buthakukye)?¿Todhri?
106Linear A
107Linear ACypro-Minoan
108CypriotImp.AramaicPalmyreneNabataean???¿Numidian?Hatran
109PhoenicianLydian????????????Meroitic H.Meroitic Cursive
10AKharoshthiO.S.ArabianO.N.Arabian(Balti)Manichaean
10BAvestanParthianInsc. Phlv.Psalt. Phlv.(Book Pahlavi)(Baburi)
10COld Turkic?????????Old Hungarian
10D(Hanifi Rohingya)(Garay (Wolof))¿Byblos?
10E???Rumi Symb.???¿Elymaic?
10F(Old Sogdian)(Sogdian)???(Uyghur)
110BrahmiKaithiSora Sompeng
111ChakmaMahajaniSharadaSinh Arch №
112Khojki(Landa)MultaniKhudawadi
113Grantha(Tigalari)¿Sharada Ext.?
114NewaTirhuta(Tani)
115(Ranjana)Siddham
116ModiMong. Supp.Takri(Jenticha)
117Ahom(Zou)(Pyu)
118(Dogra)¿Sirmauri????Warang Citi
119(Tolong Siki)(Tikamuli)(Khambu Rai)(Kirat Rai)
11A(Zanabazar Square)(Soyombo)???Pau Cin Hau
11B(Dhives Akuru)(Leke)(Nandinagari)???
11CBhaiksukiMarchen(Balti-B)
11D(Masaram Gondi)(Gunjala Gondi)(Kawi)
11E(Tocharian)(Khotanese)???(Makasar)
11F(Vatteluttu)??????¿Chola?(Tamil Supplement)
120Cuneiform
121Cuneiform
122Cuneiform
123Cuneiform
124Cuneiform NumbersEarly Dynastic Cuneiform
125Early Dynastic Cuneiform????????????
126(Proto-Cuneiform)
127(Proto-Cuneiform)
128(Proto-Cuneiform)
129(Proto-Cuneiform)
12A(Proto-Cuneiform)
12B(Proto-Cuneiform)
12C(Proto-Cuneiform)
12D(Proto-Cuneiform)
12E(Indus)
12F(Indus)?????????????????????
130Egyptian Hieroglyphs
131Egyptian Hieroglyphs
132Egyptian Hieroglyphs
133Egyptian Hieroglyphs
134Egyptian Hier.(Eg.Hi.FC)(Egyptian Hieroglyphs Extended-A)
135(Egyptian Hieroglyphs Extended-A)
136(Egyptian Hieroglyphs Extended-A)
137(Egyptian Hieroglyphs Extended-A)
138(Egyptian Hieroglyphs Extended-A)
139(Egyptian Hieroglyphs Extended-A)
13A(Egyptian Hieroglyphs Extended-A)
13B(Egyptian Hieroglyphs Extended-A)
13C(Egyptian Hieroglyphs Extended-A)
13D(Egyptian Hieroglyphs Extended-A)
13E(Egyptian Hieroglyphs Extended-A)
13F(Egyptian Hieroglyphs Extended-A)
140(Egyptian Hieroglyphs Extended-A)
141(Egyptian Hieroglyphs Extended-A)
142(Egyptian Hieroglyphs Extended-A)
143(Egyptian Hieroglyphs Extended-A)
144Anatolian Hieroglyphs
145Anatolian Hieroglyphs
146Anatolian Hieroglyphs(Egyptian Hieroglyphs Extended-B)
147(Egyptian Hieroglyphs Extended-B)
148(Egyptian Hieroglyphs Extended-B)
149(Egyptian Hieroglyphs Extended-B)
14A(Egyptian Hieroglyphs Extended-B)
14B(Egyptian Hieroglyphs Extended-B)
14C(Egyptian Hieroglyphs Extended-B)
14D(Egyptian Hieroglyphs Extended-B)
14E(Egyptian Hieroglyphs Extended-B)
14F(Egyptian Hieroglyphs Extended-B)
150(Lampung)(Kerinci)???(Mandombe)
151(Mandombe)
152(Mandombe)
153(Mandombe)
154(Mandombe)
155¿Maya Hieroglyphs?
156¿Maya Hieroglyphs?
157¿Maya Hieroglyphs?
158¿Maya Hieroglyphs?
159¿Maya Hieroglyphs?
15A??????
15B??????
15C¿Aztec Pictograms?
15D¿Aztec Pictograms?
15E¿Aztec Pictograms?
15F¿Aztec Pictograms?
160(Cirth)(Tengwar)
161(Khema (Gurung))¿Khe Prih (Gurung)????(Moon)
162(Blissymbols)
163(Blissymbols)
164(Blissymbols)
165(Blissymbols)
166(Blissymbols)
167(Bagam)¿Iban?
168Bamum Supplement
169Bamum Supplement
16ABamum Suppl.Mro(Tangsa(Mossang))Bassa Vah
16BPahawh Hmong(Woleai)
16C(Kpelle)(Afaka)(Tangsa(Khimhun))
16D??????(Kulitan)
16E(Mwangwego)(Medefaidrin)(Buginese Supplement)
16FMiao¿Lontara bilang-bilang?Ideo.Sym&Punc.
170Tangut
171Tangut
172Tangut
173Tangut
174Tangut
175Tangut
176Tangut
177Tangut
178Tangut
179Tangut
17ATangut
17BTangut
17CTangut
17DTangut
17ETangut
17FTangut
180Tangut
181Tangut
182Tangut
183Tangut
184Tangut
185Tangut
186Tangut
187Tangut
188Tangut Components
189Tangut Components
18ATangut Components
18B(Khitan Small Script)
18C(Khitan Small Script)
18D¿Khit.Sm.Rad.?(Khitan Ideographs)
18E(Khitan Ideographs)
18F(Khitan Ideographs)
190(Khitan Ideographs)
191(Khitan Ideographs)
192(Khitan Ideographs)
193(Khitan Ideographs)
194(Khitan Ideographs)
195(Khitan Ideographs)
196(Jurchen)
197(Jurchen)
198(Jurchen)
199(Jurchen)
19A(Jurchen)
19B(Jurchen)(Jurchen Radicals)??????????????????
19C???
19D???
19E(Pau Cin Hau Syllabary)
19F(Pau Cin Hau Syllabary)
1A0(Pau Cin Hau Syllabary)
1A1(Pau Cin Hau Syllabary)
1A2(Pau Cin Hau Syllabary)
1A3(Eskaya)
1A4(Eskaya)
1A5(Eskaya)
1A6(Eskaya)
1A7(Eskaya)?????????
1A8¿Naxi Geba?
1A9¿Naxi Geba?
1AA¿Naxi Geba????(Naxi Dongba)
1AB(Naxi Dongba)
1AC(Naxi Dongba)
1AD(Naxi Dongba)
1AE(Naxi Dongba)
1AF(Naxi Dongba)
1B0Kana Supplement
1B1(Kana Ext.-A)¿Kaida?(Nushu)
1B2(Nushu)
1B3(Shuishu)
1B4(Shuishu)
1B5¿Proto-Elamite?
1B6¿Proto-Elamite?
1B7¿Proto-Elamite?
1B8¿Proto-Elamite?
1B9¿Proto-Elamite?
1BA¿Proto-Elamite?
1BB¿Proto-Elamite?
1BCDuployanShFC(Pitman Sh)
1BD¿Shorthands?
1BE¿Shorthands?
1BF¿Shorthands?
1C0¿Micmac Hieroglyphs?
1C1¿Micmac Hieroglyphs?
1C2¿Micmac Hieroglyphs?
1C3¿Micmac Hieroglyphs?
1C4¿Micmac Hieroglyphs?
1C5¿Micmac Hieroglyphs?
1C6¿Micmac Hieroglyphs?
1C7¿Micmac Hieroglyphs?
1C8¿Micmac Hieroglyphs?
1C9¿Micmac Hieroglyphs?
1CA¿Micmac Hieroglyphs?¿Rongorongo?
1CB¿Rongorongo?
1CC¿Rongorongo?
1CD¿Rongorongo?????????????
1CE??????
1CF??????
1D0Byzantine Musical Symbols
1D1Musical Symbols
1D2Anc. Greek Music. Notation????????????(Mayan Numerals)
1D3Tai Xuan Jing SymbolsRod Nums¿Mathematical Alphanumeric Symbols Supplement?
1D4Mathematical Alphanumeric Symbols
1D5Mathematical Alphanumeric Symbols
1D6Mathematical Alphanumeric Symbols
1D7Mathematical Alphanumeric Symbols
1D8Sutton SignWriting
1D9Sutton SignWriting
1DASutton SignWriting???????????????
1DB??????
1DC??????
1DD??????
1DE??????
1DF??????
1E0Glagolitic Supp.¿Pallava?¿Chalukya (Box-Headed)???????
1E1(Eebee Hmong)(Cher Vang Hmong)
1E2(Western Cham)¿Beria????
1E3(Loma)
1E4(Loma)??????
1E5??????
1E6??????
1E7??????
1E8Mende Kikakui??????
1E9Adlam?????????
1EA??????
1EB??????
1EC(Persian Siyaq Numbers)(Indic Siyaq Numbers)(Diwani Siyaq Numbers)
1ED(Ottoman Siyaq Numbers)????????????
1EEArabic Mathematical Alphabetic Symbols
1EF??????
1F0Mahjong TilesDomino TilesPlaying Cards
1F1Enclosed Alphanumeric Supplement
1F2Enclosed Ideographic Supplement
1F3Miscellaneous Symbols and Pictographs
1F4Miscellaneous Symbols and Pictographs
1F5Miscellaneous Symbols and Pictographs
1F6EmoticonsOrnamental DingbatsTransport and Map Symbols
1F7Alchemical SymbolsGeometric Shapes Extended
1F8Supplemental Arrows-C
1F9Supplemental Symbols and Pictographs
1FA??????
1FB??????
1FC??????
1FD??????
1FE??????
1FF??????