TL;DR
- UTF-8μ μ λμ½λ μ€μΉΌλΌ κ°(= surrogate code point μ μΈ)μ 1~4λ°μ΄νΈ κ°λ³ κΈΈμ΄λ‘ μΈμ½λ©νλ λ°©μμ΄λ€.
- ASCII(0~127)μ μμ νΈνλλ©°, μΉμ μ¬μ€μ νμ€ μΈμ½λ©μ΄λ€.
UTF-8
μ λμ½λμ UTF-8μ κ΄κ³
λμ μλ‘ λ€λ₯Έ λ μ΄μ΄λ€:
| μν | λΉμ | |
|---|---|---|
| μ λμ½λ | μ μΈκ³ λ¬Έμμ κ³ μ λ²νΈ(μ½λ ν¬μΈνΈ)λ₯Ό λΆμ¬νλ λ²νΈν | μ νλ²νΈλΆ |
| UTF-8 | κ·Έ λ²νΈλ₯Ό μ€μ λ°μ΄νΈλ‘ μ μ₯Β·μ μ‘νλ λ°©μ | μ νλ²νΈλ₯Ό μ’ μ΄μ μ λ λ°©λ² |
'A' β U+0041 (μ λμ½λ λ²νΈ) β 0x41 (UTF-8 λ°μ΄νΈ)
'κ°' β U+AC00 (μ λμ½λ λ²νΈ) β 0xEA 0xB0 0x80 (UTF-8 λ°μ΄νΈ)
'π' β U+1F600 (μ λμ½λ λ²νΈ) β 0xF0 0x9F 0x98 0x80 (UTF-8 λ°μ΄νΈ)
μ λμ½λ μΈμ½λ© λ°©μμλ UTF-8 μΈμλ UTF-16, UTF-32κ° μμ§λ§, UTF-8μ΄ μΉΒ·νμΌΒ·νλ‘ν μ½μ μ¬μ€μ νμ€μ΄λ€.
κ°λ³ κΈΈμ΄ μΈμ½λ©
λͺ¨λ λ¬Έμλ₯Ό 4λ°μ΄νΈλ‘ μ μ₯νλ©΄ κ°λ¨νμ§λ§, μμ΄ A(λ²νΈ 65)μ 4λ°μ΄νΈλ λλΉλ€. UTF-8μ μμ λ²νΈλ μ μ λ°μ΄νΈ, ν° λ²νΈλ λ§μ λ°μ΄νΈ λ₯Ό μ¬μ©νλ€:
| μ λμ½λ λ²μ | 10μ§μ λ²μ | λ°μ΄νΈ μ | λμ λ¬Έμ |
|---|---|---|---|
| U+0000 ~ U+007F | 0 ~ 127 | 1λ°μ΄νΈ | μμ΄, μ«μ, ASCII μ 체 |
| U+0080 ~ U+07FF | 128 ~ 2,047 | 2λ°μ΄νΈ | μ λ½ μ μΌνΈ λ¬Έμ (Γ±, ΓΌ, Γ© λ±) |
| U+0800 ~ U+FFFF | 2,048 ~ 65,535 | 3λ°μ΄νΈ | νκΈ, μ€κ΅μ΄, μΌλ³Έμ΄ λλΆλΆ (λ¨, U+D800~U+DFFF surrogate μ μΈ) |
| U+10000 ~ U+10FFFF | 65,536 ~ 1,114,111 | 4λ°μ΄νΈ | μ΄λͺ¨μ§, κ³ λ λ¬Έμ |
λ°μ΄νΈ ν¨ν΄
νμκ° βμ΄ λ°μ΄νΈκ° λͺ λ°μ΄νΈμ§λ¦¬ λ¬Έμμ μμμΈμ§β ꡬλΆνκΈ° μν΄, κ° λ°μ΄νΈ μμ νμμ λλ€:
| λ°μ΄νΈ μ | 첫 λ°μ΄νΈ | μ΄μ΄μ§λ λ°μ΄νΈ | λ°μ΄ν° λΉνΈ |
|---|---|---|---|
| 1 | 0xxxxxxx | β | 7λΉνΈ |
| 2 | 110xxxxx | 10xxxxxx | 11λΉνΈ |
| 3 | 1110xxxx | 10xxxxxx Γ 2 | 16λΉνΈ |
| 4 | 11110xxx | 10xxxxxx Γ 3 | 21λΉνΈ |
κ·μΉ:
- 첫 λ°μ΄νΈμ μ ν
1μ κ°μ = μ΄ λ°μ΄νΈ μ (1λ°μ΄νΈλ0μΌλ‘ μμνμ¬ μμΈ) - μ΄μ΄μ§λ λ°μ΄νΈλ νμ
10μΌλ‘ μμ β βμ€κ° λ°μ΄νΈβλΌλ νμ - μ΄ μ€κ³ λλΆμ λ°μ΄νΈ μ€νΈλ¦Ό μ€κ°λΆν° μ½μ΄λ λ¬Έμ κ²½κ³λ₯Ό μ°Ύμ μ μλ€ (μκΈ° λκΈ°ν, self-synchronizing)
μΈμ½λ© μμ: νκΈ βκ°β
1. μ λμ½λ: 'κ°' = U+AC00 = 44032
(hexβ10μ§: AΓ16Β³ + CΓ16Β² = 10Γ4096 + 12Γ256 = 40960 + 3072 = 44032)
2. 44032λ U+0800~U+FFFF β 3λ°μ΄νΈ ν¨ν΄ μ¬μ©
3. 44032λ₯Ό 2μ§μλ‘: 1010 1100 0000 0000
4. 3λ°μ΄νΈ ν¨ν΄μ μ±μ°κΈ°:
1110[1010] 10[110000] 10[000000]
= 0xEA 0xB0 0x80
(κ²μ°: 0xEA = 14Γ16+10 = 234, 0xB0 = 11Γ16 = 176, 0x80 = 8Γ16 = 128)
5. κ²°κ³Ό: 'κ°' = 0xEA 0xB0 0x80 (3λ°μ΄νΈ)
16μ§μ μ½λ λ²
0xμU+λ λͺ¨λ βμ΄ μ«μλ 16μ§μβλΌλ μ λμ΄λ€.- ν μλ¦¬κ° 4λΉνΈ(0
F = 015)λ₯Ό νννλ―λ‘ λ°μ΄νΈ(8λΉνΈ) = hex 2μ리.- 10μ§μ λ³ν: κ° μ리 Γ 16μ κ±°λμ κ³±μ ν©μ° (μ:
0x41= 4Γ16 + 1 = 65).
μΈμ½λ© μμ: μ΄λͺ¨μ§ βπβ
1. μ λμ½λ: 'π' = U+1F600 = 128512
2. 128512λ U+10000~ β 4λ°μ΄νΈ ν¨ν΄ μ¬μ©
3. 128512λ₯Ό 2μ§μλ‘: 0 0001 1111 0110 0000 0000
4. 4λ°μ΄νΈ ν¨ν΄μ μ±μ°κΈ°:
11110[000] 10[011111] 10[011000] 10[000000]
= 0xF0 0x9F 0x98 0x80
5. κ²°κ³Ό: 'π' = 0xF0 0x9F 0x98 0x80 (4λ°μ΄νΈ)
ASCII μμ νΈν
UTF-8μ 1λ°μ΄νΈ μμ(U+0000~U+007F)μ ASCIIμ λ°μ΄νΈ κ°μ΄ λμΌνλ€:
'A' = ASCII 0x41 = UTF-8 0x41
'\n' = ASCII 0x0A = UTF-8 0x0A
- ASCIIλ‘ μμ±λ νμΌμ μμ μμ΄ μ ν¨ν UTF-8μ΄λ€
- HTTP ν€λ, JSON ν€μλ λ± ASCII κΈ°λ° νλ‘ν μ½μ΄ UTF-8 νκ²½μμ κ·Έλλ‘ λμνλ€
- νΈνμ±μ΄ UTF-8μ΄ μ¬μ€μ νμ€μ΄ λ κ²°μ μ μ΄μ λ€
μ UTF-8μ΄ νμ€μ΄ λμλ
| λμ | λ¨μ | UTF-8μ μ₯μ |
|---|---|---|
| νμ₯ ASCII (CP949 λ±) | 256μ νκ³, μΈμ½λ©λ§λ€ λ§€ν λ€λ¦ β κΉ¨μ§ | 14λ§μ+ ν΅ν©, λ¨μΌ νμ€ |
| UTF-16 | ASCII μ€μ¬ ν μ€νΈμμ λΉν¨μ¨μ , λ°μ΄νΈ μμ μ΄μλ‘ BOM(Byte Order Mark) λλ LE(리νμλμ)/BE(λΉ μλμ) λͺ μ νμ | byte-orientedλΌ λ°μ΄νΈ μμ λ¬Έμ μμ |
| UTF-32 | λͺ¨λ λ¬Έμ 4λ°μ΄νΈ β κ³΅κ° λλΉ | κ°λ³ κΈΈμ΄λ‘ ν¨μ¨μ |
Connections
- ASCII (American Standard Code for Information Interchange) β UTF-8μ 1λ°μ΄νΈ μμ(0~127)μ΄ ASCIIμ λμΌ, μμ ν νμ νΈν
- Base64 μΈμ½λ© β Base64λ λ°μ΄λ리λ₯Ό ASCII μμ λ¬Έμλ‘ λ³ν. UTF-8 ν μ€νΈλ λ°μ΄λλ¦¬λ‘ μ·¨κΈνμ¬ Base64 μΈμ½λ© κ°λ₯
Source Trail
- μλ³Έ: μν€λ°±κ³Ό β UTF-8
- κΈ°λ° νμ€: RFC 3629 (UTF-8)
- κ΄λ ¨ νμ€: Unicode Standard (μ λμ½λ λ²νΈ 체κ³)
Discussion
Comments
λκΈμ μΉμΈ ν 곡κ°λ©λλ€.