λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ–₯ Computer Science/Programming

[Programming] μœ λ‹ˆμ½”λ“œ(Unicode)λž€? (feat. UTF-8,UTF-16)

by Fomagran πŸ’» 2022. 2. 24.
728x90
λ°˜μ‘ν˜•

μ•ˆλ…•ν•˜μ„Έμš” Foma πŸ’» μž…λ‹ˆλ‹€.

 

μ˜€λŠ˜μ€ ν‰μ†Œμ— 많이 듀어보긴 ν–ˆμ§€λ§Œ μ •ν™•ν•œ λœ»μ€ λͺ¨λ₯΄λŠ” Unicode,UTF에 λŒ€ν•΄ μ •ν™•νžˆ 곡뢀λ₯Ό 해보렀고 ν•©λ‹ˆλ‹€.

 

λ°”λ‘œ μ‹œμž‘ν• κ²Œμš”~


Unicodeλž€?

 

μ΄ˆκΈ°μ— μ»΄ν“¨ν„°μ—μ„œλŠ” μ•„μŠ€ν‚€λ₯Ό μ‚¬μš©ν•˜μ˜€λŠ”λ°, 이것은 8λΉ„νŠΈλ§Œμ„ μ‚¬μš©ν•΄μ„œ 256개 문자λ₯Ό ν‘œν˜„ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

 

(λΉ„νŠΈλ₯Ό λͺ¨λ₯΄μ‹œλŠ” 뢄듀은 μ—¬κΈ° μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€!)

 

ν•˜μ§€λ§Œ 256개의 λ¬Έμžλ‘œλŠ” μ„Έκ³„μ˜ 수 λ§Žμ€ μ–Έμ–΄λ₯Ό 닀루긴 νž˜λ“€μ£ .

 

κ·Έλž˜μ„œ μ „ 세계 λͺ¨λ“  문자λ₯Ό μˆ˜μš©ν•  수 μžˆλŠ” μ‚°μ—… ν‘œμ€€μ„ μ„€κ³„ν•œ 것이 λ°”λ‘œ μœ λ‹ˆμ½”λ“œμž…λ‹ˆλ‹€.

 

이 ν‘œμ€€μ—λŠ” 문자 μ§‘ν•©μ΄λ‚˜ 문자 인코딩 λ“± λ¬Έμžλ“€μ„ 닀루기 μœ„ν•œ μ•Œκ³ λ¦¬μ¦˜ 등을 ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

μœ λ‹ˆ μ½”λ“œλŠ” μœ λ‹ˆν¬ν•œ μ½”λ“œλΌλŠ” 것을 쀄인 κ²ƒμœΌλ‘œ λͺ¨λ“  λ¬Έμžμ— νŠΉμ • 번호λ₯Ό λ§€κ²¨μ„œ μ‚¬μš©ν•©λ‹ˆλ‹€.

 

ν˜„μž¬λŠ” 문자뿐만 μ•„λ‹ˆλΌ πŸŽ¨πŸ•ΆπŸ˜ŽπŸ™„κ³Ό 같은 이λͺ¨μ§€λ„ μœ λ‹ˆμ½”λ“œμ— ν¬ν•¨λ©λ‹ˆλ‹€.

 

총 16λΉ„νŠΈλ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— 2^^16에 17개의 보쑰 평면이 μ‘΄μž¬ν•˜μ—¬ 111,4112가지 문자λ₯Ό ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

좜처:https://www.dazhuanlan.com/gustave2454/topics/1744099

 

ν•œκΈ€μ€ μ•„λž˜μ™€ 같이 0xAC00 ~ 0xD7A3 κΉŒμ§€ μ°¨μ§€ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

좜처:https://en.wikipedia.org/wiki/Hangul_Syllables


UTF-8

 

UTF의 ν’€ λ„€μž„μ€ Unicode Transformation Format)μž…λ‹ˆλ‹€.

 

즉, μœ λ‹ˆμ½”λ“œλ₯Ό λ³€ν™˜(인코딩)ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

 

뒀에 8은 8λΉ„νŠΈ 즉, 1Byteλ₯Ό κΈ°μ€€μœΌλ‘œ μΈμ½”λ”©ν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

 

λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 기본적으둜 μ„€μ •λ˜λŠ” 방식이 UTF-8μž…λ‹ˆλ‹€.


UTF-16

 

μœ„μ—μ„œ μ„€λͺ…ν•œ UTF-8은 1Byte κΈ°μ€€μ΄μ§€λ§Œ UTF-16은 16bit 즉, 2Byte κΈ°μ€€μœΌλ‘œ μΈμ½”λ”©ν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

 

μœˆλ„μš°μ—μ„œ 기본적으둜 μ„€μ •λ˜λŠ” 방식이 UTF-16μž…λ‹ˆλ‹€.

 

UTF-8은 λ°μ΄ν„°λ² μ΄μŠ€μ΄κ³  μœˆλ„μš°λŠ” UTF-16이기 λ•Œλ¬Έμ— 보톡 REST APIλ₯Ό μ΄μš©ν•΄μ„œ 데이터λ₯Ό 보내면

 

POST: μœˆλ„μš°μ—μ„œ UTF-16으둜 보낸 문자λ₯Ό 데이터 λ² μ΄μŠ€μ—μ„œ UTF-8둜 λ³€ν™˜ν•΄ 가지고 μžˆλ‹€.

 

GET: λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ UTF-8둜 가지고 μžˆλ‹€κ°€ UTF-16으둜 λ³€ν™˜ν•΄ μœˆλ„μš°μ— μ „λ‹¬ν•œλ‹€.


UTF 인코딩 및 λ””μ½”λ”© κ³Όμ •

 

Helloλ₯Ό UTF-8둜 인코딩 ν•˜κ²Œ 되면 λ‹€μ–‘ν•œ κ°’μœΌλ‘œ λ³€ν™˜ν•  수 μžˆλŠ”λ°μš”.

 

μ•„λž˜μ™€ 같이 λ‹€μ–‘ν•œ 값을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. (μ‚¬μ΄νŠΈλŠ” μ—¬κΈ°λ‘œ λ“€μ–΄κ°€μ‹œλ©΄ λ©λ‹ˆλ‹€.)

 

 

이 μ€‘μ—μ„œ HexString을 μ‚΄νŽ΄λ³΄λ©΄ 48656c6c6f둜 λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.

 

μ΄μœ λŠ” Hκ°€ UTF-8 Encoidng 값이 48이고 

 

 

eκ°€ 65이고

 

 

l이 6c이고

 

 

oκ°€ 6f이기 λ•Œλ¬Έμ— HelloλŠ” 48656c6c6fκ°€ λ˜λŠ” 것이죠!

 

 

λ””μ½”λ”© λ˜ν•œ λ˜‘κ°™μ΄ 48이 H,65κ°€ e,6cκ°€ l,6fκ°€ o => Helloκ°€ λ˜λŠ” 것이죠.

 

가끔 μ»΄ν“¨ν„°μ—μ„œ ν•œκΈ€μ΄ \uc548\ub155\ud558\uc138\uc694 κ³Ό 같이 보일 λ•Œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

 

이것 λ˜ν•œ UTF-16으둜 ν•œκΈ€μ„ 인코딩 ν•œ λ¬ΈμžμΈλ°μš”.

 

uc548 => μ•ˆ

 

 

ub155 => λ…•

 

 

ud558 => ν•˜

 

 

uc138 => μ„Έ

 

 

uc694 =>μš”

 

 

μ΄λ ‡κ²Œ μœ„μ™€ 같이 μœ λ‹ˆμ½”λ“œμ˜ λ“±λ‘λ˜μ–΄ μžˆλŠ” λ²ˆν˜ΈλŒ€λ‘œ 인코딩과 디코딩이 μ΄λ£¨μ–΄μ§€κ²Œ λ©λ‹ˆλ‹€.

728x90
λ°˜μ‘ν˜•

λŒ“κΈ€