사용 방법
- 글자 → 코드: 글을 붙여 넣으면 글자마다 코드포인트(U+…), 10진수, UTF-8 바이트, UTF-16 코드유닛, HTML 엔티티, 분류를 표로 보여 줍니다.
- 코드 → 글자: 방향을 바꾸고
U+AC00,44032,가,0xEA 0xB0 0x80같은 값을 넣으면 원래 글자로 되돌립니다. 값을 무엇으로 읽을지는 자동으로 판별하고, 필요하면 직접 고를 수 있습니다. - 붙여 넣은 글에 눈에 보이지 않는 문자가 있으면 몇 번째 글자에 무엇이 있는지 알려 주고, 보이지 않는 문자 정리 단추로 한 번에 없앨 수 있습니다.
- 입력한 글은 서버로 전송되지 않습니다. 모든 계산은 브라우저 안에서 끝납니다. 한 번에 50,000자까지 분석합니다.
유니코드와 UTF-8은 무엇이 다른가
유니코드는 세상의 모든 글자에 번호를 하나씩 붙여 둔 약속입니다. 한글 "가"는 44032번, 영문 "A"는 65번이고, 이 번호를 16진수로 적어 U+AC00, U+0041처럼 씁니다. 번호는 U+0000부터 U+10FFFF까지 약 111만 자리가 있고, 그 가운데 실제로 글자가 배정된 것은 15만 개 정도입니다.
UTF-8은 그 번호를 파일·네트워크에 어떻게 담을지 정한 방식입니다. 번호가 작으면 짧게, 크면 길게 적는 가변 길이 방식이라 영문·숫자는 1바이트, 한글·한자는 3바이트, 이모지는 4바이트가 됩니다. 그래서 한글 세 글자짜리 이름이 9바이트를 차지하고, "1,000바이트 제한"이 걸린 칸에는 한글을 333자까지만 넣을 수 있습니다. UTF-16은 또 다른 담는 방식으로, 대부분의 글자를 2바이트 한 덩어리로 적고 이모지처럼 큰 번호는서로게이트라 부르는 두 덩어리로 나눕니다. 자바스크립트의 "😀".length가 2인 이유가 이것입니다. 번호(코드포인트)는 하나인데 담는 방식에 따라 조각 수가 달라지는 것이므로, 세 값을 나란히 보면 원인을 찾기 쉽습니다.
보이지 않는 문자가 왜 문제인가
화면에는 아무것도 없어 보이지만 실제로는 들어 있는 문자가 있습니다. 웹페이지·PDF·엑셀·메신저에서 글을 복사하면 줄바꿈 없는 공백(U+00A0), 제로 폭 공백(U+200B), 파일 앞머리의 BOM(U+FEFF), 한글 입력기의 전각 공백(U+3000)이 함께 따라옵니다. 이들은 눈으로 구별할 수 없는데 컴퓨터에게는 전혀 다른 문자라서, 이름이 같아 보이는 값이 데이터베이스에서 서로 다른 값이 되고, 숫자 앞에 BOM이 붙어 계산이 되지 않고, 찾기·바꾸기와 정규식이 조용히 실패합니다. 오른쪽부터 쓰기 강제 문자(U+202E)는 뒤따르는 글을 거꾸로 보이게 해 파일 이름을 위장하는 데 악용되기도 합니다. 위 결과 칸은 이런 문자를 찾아 몇 번째 글자인지, 몇 줄 몇 칸인지까지 알려 줍니다.
| 코드 | 이름 | 무엇이 문제인가 |
|---|---|---|
U+00A0 | 줄바꿈 없는 공백 (NBSP) | 보통 공백처럼 보이지만 다른 문자라 검색·비교·trim()이 실패합니다. 워드·한글·웹페이지 복사에서 가장 흔합니다. |
U+200B | 제로 폭 공백 (ZWSP) | 폭이 0인데 글자 수에는 들어갑니다. 줄바꿈 위치를 지정하려고 넣지만 복사하면 그대로 따라옵니다. |
U+200D | 제로 폭 결합자 (ZWJ) | 폭이 0입니다. 가족 이모지처럼 이모지를 잇는 데 정상적으로 쓰이지만, 글자 사이에 숨어 있으면 문제입니다. |
U+FEFF | BOM / 제로 폭 줄바꿈 없는 공백 (U+FEFF) | 파일 맨 앞의 인코딩 표시입니다. CSV 첫 칸 이름이나 숫자 앞에 남으면 값이 달라지고 Number()가 NaN이 됩니다. |
U+3000 | 전각 공백 (한글·일본어 입력기) | 한글 입력 상태에서 스페이스를 눌러 생깁니다. 일반 공백보다 넓고 다른 문자입니다. |
U+202E | 오른쪽부터 쓰기 강제 (RLO) | 뒤따르는 글이 거꾸로 보입니다. 파일 이름을 "txt.exe" → "exe.txt"처럼 위장하는 데 악용됩니다. |
U+00AD | 소프트 하이픈 | 줄 끝에서만 - 로 보입니다. 단어 중간에 숨어 검색이 안 되게 만듭니다. |
U+2060 | 단어 결합자 (WJ) | 폭이 0입니다. 줄바꿈을 막으려고 넣지만 눈에 보이지 않습니다. |
U+202F | 좁은 줄바꿈 없는 공백 (NNBSP) | 좁은 공백입니다. 일반 공백과 달라 검색·비교가 실패합니다. |
U+2028 | 줄 구분자 (LS) | JSON·자바스크립트 문자열에서 문법 오류를 일으켰던 문자입니다. |
U+FE0F | 이모지 모양 선택자 (VS16) | 앞 문자를 이모지로 그리게 하는 폭 0 문자입니다. 이모지에서는 정상입니다. |
코드를 적는 여러 가지 방법
아래 표기는 모두 알아봅니다. 접두사가 없는 값은 a~f가 섞여 있으면 16진수, 숫자뿐이면 10진수로 읽습니다.
| 이렇게 적어도 됩니다 | 설명 |
|---|---|
U+AC00 | 유니코드 표준 표기 (대소문자 상관없음) |
0xAC00 | 16진수 |
44032 | 10진수 |
가 | HTML 10진 참조 |
가 | HTML 16진 참조 |
& | HTML 이름 참조 |
\uAC00 | 자바스크립트·자바 이스케이프 |
\u{1F600} | 자바스크립트 코드포인트 이스케이프 |
0xEA 0xB0 0x80 | UTF-8 바이트 (자동 판별) |
%EA%B0%80 | 주소의 퍼센트 인코딩 |
D83D DE00 | UTF-16 코드유닛 (서로게이트 짝) |
자주 쓰는 문자 코드
| 설명 | 코드포인트 | 10진수 | UTF-8 | HTML 엔티티 |
|---|---|---|---|---|
| 영문 대문자 A | U+0041 | 65 | 41 | A |
| 영문 소문자 a | U+0061 | 97 | 61 | a |
| 숫자 0 | U+0030 | 48 | 30 | 0 |
| 공백 (스페이스) | U+0020 | 32 | 20 |   |
| 줄바꿈 (LF) | U+000A | 10 | 0A | |
| 한글 첫 음절 가 | U+AC00 | 44,032 | EA B0 80 | 가 |
| 한글 마지막 음절 힣 | U+D7A3 | 55,203 | ED 9E A3 | 힣 |
| 한글 호환 자모 ㄱ | U+3131 | 12,593 | E3 84 B1 | ㄱ |
| 한자 漢 | U+6F22 | 28,450 | E6 BC A2 | 漢 |
| 원화 기호 | U+20A9 | 8,361 | E2 82 A9 | ₩ |
| 줄표 (em dash) | U+2014 | 8,212 | E2 80 94 | — |
| 웃는 얼굴 이모지 | U+1F600 | 128,512 | F0 9F 98 80 | 😀 |
아스키표 (0~127)
아스키는 1963년에 정해진 7비트 부호표로, 지금도 유니코드 앞머리와 값이 같습니다. 0~31과 127은 화면에 그려지지 않는 제어 문자여서 글자 대신 약어로 적습니다. 대문자와 소문자는 정확히 32 차이가 나므로(A=65, a=97) 32를 더하거나 빼면 대소문자를 바꿀 수 있고, 숫자 문자는 48부터 시작하므로 48을 빼면 숫자 값이 됩니다.
인쇄 가능한 문자 (32~126)
| 10진 | 16진 | 8진 | 문자 | 설명 |
|---|---|---|---|---|
| 32 | 20 | 040 | (공백) | 공백 (스페이스) |
| 33 | 21 | 041 | ! | 느낌표 |
| 34 | 22 | 042 | " | 쌍따옴표 |
| 35 | 23 | 043 | # | 샵·해시 |
| 36 | 24 | 044 | $ | 달러 |
| 37 | 25 | 045 | % | 퍼센트 |
| 38 | 26 | 046 | & | 앰퍼샌드 |
| 39 | 27 | 047 | ' | 작은따옴표 |
| 40 | 28 | 050 | ( | 여는 소괄호 |
| 41 | 29 | 051 | ) | 닫는 소괄호 |
| 42 | 2A | 052 | * | 별표 |
| 43 | 2B | 053 | + | 더하기 |
| 44 | 2C | 054 | , | 쉼표 |
| 45 | 2D | 055 | - | 하이픈·빼기 |
| 46 | 2E | 056 | . | 마침표 |
| 47 | 2F | 057 | / | 슬래시 |
| 48 | 30 | 060 | 0 | 숫자 |
| 49 | 31 | 061 | 1 | 숫자 |
| 50 | 32 | 062 | 2 | 숫자 |
| 51 | 33 | 063 | 3 | 숫자 |
| 52 | 34 | 064 | 4 | 숫자 |
| 53 | 35 | 065 | 5 | 숫자 |
| 54 | 36 | 066 | 6 | 숫자 |
| 55 | 37 | 067 | 7 | 숫자 |
| 56 | 38 | 070 | 8 | 숫자 |
| 57 | 39 | 071 | 9 | 숫자 |
| 58 | 3A | 072 | : | 콜론 |
| 59 | 3B | 073 | ; | 세미콜론 |
| 60 | 3C | 074 | < | 작다 |
| 61 | 3D | 075 | = | 같다 |
| 62 | 3E | 076 | > | 크다 |
| 63 | 3F | 077 | ? | 물음표 |
| 64 | 40 | 100 | @ | 골뱅이 |
| 65 | 41 | 101 | A | 영문자 |
| 66 | 42 | 102 | B | 영문자 |
| 67 | 43 | 103 | C | 영문자 |
| 68 | 44 | 104 | D | 영문자 |
| 69 | 45 | 105 | E | 영문자 |
| 70 | 46 | 106 | F | 영문자 |
| 71 | 47 | 107 | G | 영문자 |
| 72 | 48 | 110 | H | 영문자 |
| 73 | 49 | 111 | I | 영문자 |
| 74 | 4A | 112 | J | 영문자 |
| 75 | 4B | 113 | K | 영문자 |
| 76 | 4C | 114 | L | 영문자 |
| 77 | 4D | 115 | M | 영문자 |
| 78 | 4E | 116 | N | 영문자 |
| 79 | 4F | 117 | O | 영문자 |
| 80 | 50 | 120 | P | 영문자 |
| 81 | 51 | 121 | Q | 영문자 |
| 82 | 52 | 122 | R | 영문자 |
| 83 | 53 | 123 | S | 영문자 |
| 84 | 54 | 124 | T | 영문자 |
| 85 | 55 | 125 | U | 영문자 |
| 86 | 56 | 126 | V | 영문자 |
| 87 | 57 | 127 | W | 영문자 |
| 88 | 58 | 130 | X | 영문자 |
| 89 | 59 | 131 | Y | 영문자 |
| 90 | 5A | 132 | Z | 영문자 |
| 91 | 5B | 133 | [ | 여는 대괄호 |
| 92 | 5C | 134 | \ | 역슬래시 (한글 글꼴에서는 ₩로 보임) |
| 93 | 5D | 135 | ] | 닫는 대괄호 |
| 94 | 5E | 136 | ^ | 캐럿 |
| 95 | 5F | 137 | _ | 밑줄 |
| 96 | 60 | 140 | ` | 역따옴표 (백틱) |
| 97 | 61 | 141 | a | 영문자 |
| 98 | 62 | 142 | b | 영문자 |
| 99 | 63 | 143 | c | 영문자 |
| 100 | 64 | 144 | d | 영문자 |
| 101 | 65 | 145 | e | 영문자 |
| 102 | 66 | 146 | f | 영문자 |
| 103 | 67 | 147 | g | 영문자 |
| 104 | 68 | 150 | h | 영문자 |
| 105 | 69 | 151 | i | 영문자 |
| 106 | 6A | 152 | j | 영문자 |
| 107 | 6B | 153 | k | 영문자 |
| 108 | 6C | 154 | l | 영문자 |
| 109 | 6D | 155 | m | 영문자 |
| 110 | 6E | 156 | n | 영문자 |
| 111 | 6F | 157 | o | 영문자 |
| 112 | 70 | 160 | p | 영문자 |
| 113 | 71 | 161 | q | 영문자 |
| 114 | 72 | 162 | r | 영문자 |
| 115 | 73 | 163 | s | 영문자 |
| 116 | 74 | 164 | t | 영문자 |
| 117 | 75 | 165 | u | 영문자 |
| 118 | 76 | 166 | v | 영문자 |
| 119 | 77 | 167 | w | 영문자 |
| 120 | 78 | 170 | x | 영문자 |
| 121 | 79 | 171 | y | 영문자 |
| 122 | 7A | 172 | z | 영문자 |
| 123 | 7B | 173 | { | 여는 중괄호 |
| 124 | 7C | 174 | | | 수직선·파이프 |
| 125 | 7D | 175 | } | 닫는 중괄호 |
| 126 | 7E | 176 | ~ | 물결표 |
제어 문자 (0~31, 127)
| 10진 | 16진 | 약어 | 이스케이프 | 설명 |
|---|---|---|---|---|
| 0 | 00 | NUL | \0 | 널 문자 (문자열 끝 표시) |
| 1 | 01 | SOH | - | 헤딩 시작 |
| 2 | 02 | STX | - | 본문 시작 |
| 3 | 03 | ETX | - | 본문 끝 (Ctrl+C) |
| 4 | 04 | EOT | - | 전송 끝 (Ctrl+D) |
| 5 | 05 | ENQ | - | 조회 |
| 6 | 06 | ACK | - | 응답 확인 |
| 7 | 07 | BEL | \a | 경고음 |
| 8 | 08 | BS | \b | 백스페이스 |
| 9 | 09 | HT | \t | 수평 탭 (Tab) |
| 10 | 0A | LF | \n | 줄바꿈 (유닉스·맥·웹) |
| 11 | 0B | VT | \v | 수직 탭 |
| 12 | 0C | FF | \f | 폼 피드 (쪽 넘김) |
| 13 | 0D | CR | \r | 캐리지 리턴 (윈도우는 CR+LF) |
| 14 | 0E | SO | - | 시프트 아웃 |
| 15 | 0F | SI | - | 시프트 인 |
| 16 | 10 | DLE | - | 전송 제어 탈출 |
| 17 | 11 | DC1 | - | 장치 제어 1 (XON) |
| 18 | 12 | DC2 | - | 장치 제어 2 |
| 19 | 13 | DC3 | - | 장치 제어 3 (XOFF) |
| 20 | 14 | DC4 | - | 장치 제어 4 |
| 21 | 15 | NAK | - | 부정 응답 |
| 22 | 16 | SYN | - | 동기 대기 |
| 23 | 17 | ETB | - | 전송 블록 끝 |
| 24 | 18 | CAN | - | 취소 |
| 25 | 19 | EM | - | 매체 끝 |
| 26 | 1A | SUB | - | 치환 (윈도우 파일 끝, Ctrl+Z) |
| 27 | 1B | ESC | \e | 이스케이프 (ANSI 색 코드 시작) |
| 28 | 1C | FS | - | 파일 구분자 |
| 29 | 1D | GS | - | 그룹 구분자 |
| 30 | 1E | RS | - | 레코드 구분자 |
| 31 | 1F | US | - | 단위 구분자 |
| 127 | 7F | DEL | - | 삭제 (천공 카드의 전부 구멍) |
알아 두기
- 글자 수는 세 가지가 모두 다를 수 있습니다. 웃는 얼굴 이모지 하나는 보이는 글자 1개, 코드포인트 1개, UTF-16 코드유닛 2개, UTF-8 4바이트입니다.
- 한글은 완성형 음절(U+AC00 가)로도, 자모를 따로 적은 형태(U+1100 U+1161)로도 쓸 수 있습니다. 맥에서 만든 파일 이름이 "ㄱㅏㄴㅏ"처럼 풀어져 보이는 것이 뒤쪽 방식입니다.
- 표는 앞부분만 보여 주고 남은 개수를 따로 알려 줍니다. 전체 목록이 필요하면 코드포인트 목록 칸을 복사해 쓰세요.
- 서로게이트 영역(U+D800~U+DFFF)은 단독 문자가 아니어서 그 값 하나만 넣으면 오류로 알려 줍니다.