로그인하고 있지 않습니다. 편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!'''UTF-8'''은 [[유니코드]] [[문자 인코딩]]의 대표적 표준이다. 명칭은 ''Unicode Transformation Format – 8-bit'' 또는 ''Universal Coded Character Set Transformation Format – 8-bit''의 약자이다. [[ASCII]] 문자는 1바이트로 표현하며, 기타 문자는 2~4바이트로 표현한다. 대부분의 [[리눅스 배포판]]과 [[macOS]]에서 표준 인코딩으로 채택되어 사용되고 있으며, [[웹]]에서도 많이 쓰인다. 대부분의 CJKV 문자([[한글]]·[[한자]]·[[히라가나]]·[[가타카나]] 등)는 3바이트 영역에 들어간다. UTF-8은 ASCII를 사용하는 프로그램에서도 큰 오작동이 일어날 일이 없다는 장점이 있기 때문에, 애초에 ASCII를 위해 디자인된 [[유닉스 계열]] [[운영 체제]]에서는 UTF-8을 권장한다. [[Microsoft Windows]]는 [[UTF-16]]을 사용한다. == 구조 == {| class="wikitable" |- ! 첫 번째<br />코드 포인트 !! 마지막<br />코드 포인트 !! 첫째 바이트 !! 둘째 바이트 !! 셋째 바이트 !! 넷째 바이트 !! 시작 !! 끝 |- | U+0000 || U+007F || <code>0xxxxxxx</code> || || || || <code>00</code> || <code>7F</code> |- | U+0080 || U+07FF || <code>110xxxxx</code> || <code>10xxxxxx</code> || || || <code>C2 80</code> || <code>DF BF</code> |- | U+0800 || U+FFFF || <code>1110xxxx</code> || <code>10xxxxxx</code> || <code>10xxxxxx</code> || || <code>E0 A0 80</code> || <code>EF BF BF</code> |- |U+10000 || U+10FFFF || <code>11110xxx</code> || <code>10xxxxxx</code>||<code>10xxxxxx</code>||<code>10xxxxxx</code> || <code>F0 90 80 80</code> || <code>F4 8F BF BF</code> |} 먼저 ASCII 영역의 문자는 첫 비트를 0으로 둬서 1바이트로 끝남을 표시한다. 그 외의 문자는 모든 첫 비트가 1이다. ASCII 외 문자는 첫째 바이트의 처음 연속한 1의 개수에 따라 몇 바이트로 인코딩할 지를 표시하고, 나머지 바이트는 앞에 10을 붙여서 뒤따르는 바이트임을 나타낸다. 하나의 문자가 여러 가지 방법으로 인코딩될 수 있으나, 올바른 UTF-8 표현은 가장 짧은 것 하나뿐이다. 예를 들어 U+0000은 <code>00</code>, <code>C0 80</code>, <code>D0 80 80</code>, <code>F0 80 80 80</code>과 같이 여러 가지 방법으로 인코딩될 수 있지만, 이 중에서 가장 짧은 <code>00</code> 하나만이 올바른 UTF-8 표현이다. 4바이트 인코딩의 경우, 21비트를 담고 있으므로 이론상으로는 U+1FFFFF까지 표현할 수 있다. 다만 [[유니코드]]의 범위가 U+10FFFF까지이기에 이후 범위는 쓰지 않는다. == 인코딩 예 == ;1바이트 인코딩: L(U+004C) * ASCII 문자이므로 유니코드 값 그대로 <code>01001100</code>으로 나타내며, 16진수로 <code>4C</code>가 된다. ;2바이트 인코딩: λ(U+03BB, 그리스 문자 람다 소문자) * U+0080과 U+07FF 사이에 있으므로 2바이트로 표현된다. * 2진수 값을 5비트와 6비트로 쪼갠다. <code>00000011 10111011</code> → <code>01110 111011</code> * 2바이트 패턴인 <code>110xxxxx 10xxxxxx</code>에 넣으면 <code>110<u>01110</u> 10<u>111011</u></code>이다. * 따라서 λ는 UTF-8에서 <code>CE BB</code>로 인코딩된다. ;3바이트 인코딩: €(U+20AC, 유로 기호) * U+0800과 U+FFFF 사이에 있으므로 3바이트로 표현된다. * 0x20AC는 2진수로 <code>0010 0000 1010 1100</code>로 표현된다. 맨 앞에 0 두 개가 추가된 이유는 3바이트 표현은 정확히 16비트를 필요로 하기 때문이다. * 이를 <code>1110xxxx 10xxxxxx 10xxxxxx</code>이라는 패턴에 그대로 집어넣는다. 그러면 <code>1110<u>0010</u> 10<u>000010</u> 10<u>101100</u></code>이 된다. * 따라서 €는 UTF-8에서 <code>E2 82 AC</code>로 표현된다. ;4바이트 인코딩: 🙂(U+1F642, 스마일 이모지) * U+10000 이후 범위에 속해 있으므로 4바이트로 나타낸다. * 2진수 값을 21비트까지 펼치고 3+6+6+6 비트로 쪼갠다. <code>1 11110110 01000010</code> → <code>000 011111 011001 000010</code> * 위 표에 써진 패턴을 적용하면 <code>11110<u>000</u> 10<u>011111</u> 10<u>011001</u> 10<u>000010</u></code> * 따라서 해당 이모지의 인코딩 결과는 <code>F0 9F 99 82</code>이다. == URL 인코딩 == 웹페이지 주소에서 % 기호가 연속으로 붙어 있다면 이는 퍼센트 인코딩이 적용된 것인데, 이때 문자열은 UTF-8 인코딩을 기준으로 나타낸다. 한국어 위키와 같이 한글이 들어가는 URL을 쓴다면 이 형태를 많이 볼 수 있다. 가령 본 문서의 "리브레 위키"로 가는 링크인 <code><nowiki>https://librewiki.net/wiki/리브레_위키</nowiki></code>를 퍼센트 인코딩으로 나타낼 때, 위 문단에서 소개한 인코딩 방식으로 출력한다. 이때 UTF-8 인코딩 결과를 각 바이트마다 % 기호를 붙여둔다. '리'(U+B9AC)를 UTF-8로 나타내면 <code>EB A6 AC</code>가 된다. 여기에 각 바이트에다 %를 붙이면 <code>%EB%A6%AC</code>가 된다. 다른 문자들도 마찬가지 방법으로 인코딩을 거쳐 이어붙이면, 주소는 아래와 같이 출력된다. <code><nowiki>https://librewiki.net/wiki/%EB%A6%AC%EB%B8%8C%EB%A0%88_%EC%9C%84%ED%82%A4</nowiki></code> 참고로 공백의 경우 위키백과나 리브레 위키에서는 언더바(_)로 나타내지만 나무위키에서는 공백도 마찬가지로 위 인코딩을 거쳐 %20으로 출력한다. {{프로그래밍}} [[분류:유니코드]] [[분류:표준]] {{각주}} 요약: 리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다. 취소 편집 도움말 (새 창에서 열림) | () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |} {{lang|}} · {{llang||}} · {{인용문|}} · {{인용문2|}} · {{유튜브|}} · {{다음팟|}} · {{니코|}} · {{토막글}} {{삭제|}} · {{특정판삭제|}}(이유를 적지 않을 경우 기각될 가능성이 높습니다. 반드시 이유를 적어주세요.) {{#expr:}} · {{#if:}} · {{#ifeq:}} · {{#iferror:}} · {{#ifexist:}} · {{#switch:}} · {{#time:}} · {{#timel:}} · {{#titleparts:}} __NOTOC__ · __FORCETOC__ · __TOC__ · {{PAGENAME}} · {{SITENAME}} · {{localurl:}} · {{fullurl:}} · {{ns:}} –(대시) ‘’(작은따옴표) “”(큰따옴표) ·(가운뎃점) …(말줄임표) ‽(물음느낌표) 〈〉(홑화살괄호) 《》(겹화살괄호) ± − × ÷ ≈ ≠ ∓ ≤ ≥ ∞ ¬ ¹ ² ³ ⁿ ¼ ½ ¾ § € £ ₩ ¥ ¢ † ‡ • ← → ↔ ‰ °C µ(마이크로) Å °(도) ′(분) ″(초) Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι ι Κ κ Λ λ Μ μ(뮤) Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ Φ φ Χ χ Ψ ψ Ω ω · Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ · Ϊ ϊ Ϋ ϋ · ΐ ΰ Æ æ Đ(D with stroke) đ Ð(eth) ð ı Ł ł Ø ø Œ œ ß Þ þ · Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź · À à È è Ì ì Ǹ ǹ Ò ò Ù ù · İ Ż ż ·  â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û · Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ · ǘ ǜ ǚ ǖ · caron/háček: Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž · breve: Ă ă Ğ ğ Ŏ ŏ Ŭ ŭ · Ā ā Ē ē Ī ī Ō ō Ū ū · à ã Ñ ñ Õ õ · Å å Ů ů · Ą ą Ę ę · Ç ç Ş ş Ţ ţ · Ő ő Ű ű · Ș ș Ț ț 이 문서에서 사용한 틀: 틀:Skin (원본 보기) (준보호됨)틀:각주 (원본 보기) (준보호됨)틀:둘러보기 상자 (원본 보기) (보호됨)틀:둘러보기 상자/중첩 (원본 보기) (준보호됨)틀:둘러보기 상자/핵심 (원본 보기) (보호됨)틀:틀바 (원본 보기) (준보호됨)틀:프로그래밍 (편집)