유니코드 텍스트 정리 — 깨진 글자와 보이지 않는 글자
글자가 깨져 보이는 데는 몇 가지 정해진 이유가 있습니다. 인코딩을 잘못 읽었거나, 같은 글자가 다른 방식으로 저장돼 있거나, 눈에 안 보이는 글자가 섞여 있거나. 원인마다 고치는 방법이 달라서, 먼저 어느 경우인지 알아야 합니다.
이 도구가 다루는 문제는 셋입니다. 첫째, 인코딩을 잘못 읽어 '안녕하세요' 가 'ìëíì¸ì' 처럼 나오는 경우. 둘째, 화면에는 똑같이 보이지만 컴퓨터에게는 다른 값인 경우. 셋째, 폭이 없거나 특이한 공백이 섞여 들어간 경우.
셋 다 눈으로는 원인을 알 수 없습니다. 그래서 붙여넣으면 무엇을 어떻게 바꿨는지 함께 보여 줍니다.
'ìëíì¸ì' 는 되살릴 수 있습니다
한글은 UTF-8 에서 한 글자가 세 바이트입니다. 그 바이트들을 한 바이트씩 서유럽 문자로 읽어 버리면 알파벳과 기호가 뒤섞인 문자열이 나옵니다. 이걸 모지바케라고 부릅니다.
글자가 지워진 것이 아니라 잘못 읽힌 것뿐이라, 바이트를 되돌려 다시 읽으면 원래 글자가 나옵니다. 엑셀에서 연 CSV, 압축 파일 안의 파일 이름, 데이터베이스에서 뽑아낸 자료가 대부분 이 형태입니다.
다만 아무 글이나 되돌리면 안 됩니다. café 나 Grüße 는 멀쩡한 글인데 억지로 되돌리면 망가집니다. 이 도구는 되돌린 결과에 한자·한글·가나가 새로 나타날 때만 적용합니다. 그렇지 않으면 원래 글이 맞다고 보고 건드리지 않습니다.
실제로 되살아나는 예
| 깨진 상태 | 복구 |
|---|---|
| ìëíì¸ì | 안녕하세요 |
| ìì¸ ë§ì§ | 서울 맛집 |
| ããã«ã¡ã¯ | こんにちは |
| café | 그대로 (멀쩡한 글) |
| Grüße | 그대로 (멀쩡한 글) |
같아 보이는데 다른 글자
맥에서 입력한 '안녕' 은 여섯 조각으로, 윈도우에서 입력한 '안녕' 은 두 조각으로 저장됩니다. 맥이 한글을 자음과 모음으로 풀어서 저장하는 방식(NFD)을 쓰기 때문입니다. 화면에는 똑같이 보이는데 검색해도 안 걸리고, 파일 이름을 비교하면 다른 파일로 잡힙니다.
자음 하나를 따로 쓸 때도 두 가지가 있습니다. 키보드로 친 ㄱ(U+3131)과 글자를 조립할 때 쓰는 ᄀ(U+1100)은 서로 다른 글자입니다. 앞엣것은 그 자체로 하나의 기호이고, 뒤엣것은 받침이나 초성으로 붙는 부품입니다.
이 도구는 이런 것들을 하나의 표준 형태(NFC)로 모아 붙입니다. 그러면 어느 컴퓨터에서 온 글이든 같은 글이 같은 값이 됩니다.
보이지 않는 글자
웹에서 복사한 글에는 눈에 안 보이는 글자가 섞여 들어옵니다. 폭이 아예 없는 공백(U+200B), 줄바꿈을 막는 공백(U+00A0), 한자 문화권에서 쓰는 전각 공백(U+3000) 같은 것들입니다.
이것들은 화면에서 그냥 공백처럼 보이거나 아예 안 보이는데, 검색에는 걸립니다. 문장을 그대로 복사해서 검색했는데 아무것도 안 나오는 이유가 대개 이것입니다. 코드에 들어가면 오류의 원인이 되고, 표에 들어가면 숫자가 문자로 취급됩니다.
이럴 때 씁니다
- •엑셀에서 CSV 를 열었더니 한글이 전부 깨져 있을 때
- •압축을 풀었더니 파일 이름이 알아볼 수 없는 문자열일 때
- •맥에서 받은 파일 이름이 검색에 안 걸릴 때
- •웹에서 복사한 문장이 검색되지 않을 때
- •붙여넣은 숫자가 계산에서 문자로 취급될 때
자주 묻는 질문
복구가 안 되는 경우도 있나요?
있습니다. 잘못 읽는 과정에서 일부 바이트가 물음표나 대체 문자로 바뀌어 저장됐다면 그 정보는 사라진 것이라 되돌릴 수 없습니다. 원본을 다시 받는 수밖에 없습니다.
왜 멀쩡한 글자까지 바꾸지 않나요?
바꾸면 안 되기 때문입니다. 독일어와 프랑스어 텍스트는 모지바케와 비슷하게 생겼지만 멀쩡한 글입니다. 되돌린 결과에 동아시아 글자가 새로 나타날 때만 적용하는 것이 그 구분선입니다.
NFC 로 바꾸면 글자가 달라지나요?
보이는 글자는 그대로입니다. 저장 방식만 하나로 모읍니다. 다만 파일 이름을 바꿀 때는 원본 시스템이 NFD 를 쓴다면 그쪽에서 다시 풀릴 수 있습니다.
붙여넣은 글이 저장되나요?
아니요. 전부 브라우저 안에서 처리합니다.
