测试를 娴嬭瘯로 뒤바꾸는 인코딩은 무엇입니까?
UTF-8 → GBK UTF-8 바이트를 GBK로 읽은 것입니다. UTF-8 여섯 바이트(E6 B5 8B E8 AF 95)가 GBK 세 글자로 다시 묶입니다.
깨진 문자를 붙여넣으면 원문을 되살립니다. UTF-8, EUC-KR, GBK, Big5 조합을 모두 시도하고 왕복 검증을 통과한 경로를 표시합니다. 브라우저 안에서만 처리됩니다.
깨진 문자를 붙여넣으십시오. 가능한 모든 인코딩 경로를 시도해 결과에 순위를 매깁니다. 어떤 인코딩 때문에 깨졌는지 알 필요는 없습니다.
测试
UTF-8 → GBK
娴å¬ç˜¯
Windows-1252 / Latin-1 → UTF-8
测试
Windows-1252 / Latin-1 → GBK
测试
Windows-1251 → GBK
같은 텍스트가 흔히 쓰이는 모든 인코딩에서 어떤 바이트가 되는지 한 번에 봅니다. 데이터베이스나 프로토콜에 정확히 무엇이 저장되는지 알아야 할 때 유용합니다.
| 인코딩 | 바이트 수 | 16진수 |
|---|---|---|
| UTF-8 | 6 | E4 B8 AD E6 96 87 |
| GBK | 4 | D6 D0 CE C4 |
| GB18030 | 4 | D6 D0 CE C4 |
| Big5 | 4 | A4 A4 A4 E5 |
| Shift_JIS | 4 | 92 86 95 B6 |
| EUC-KR | 4 | F1 E9 D9 FE |
Go Tools 엔지니어링 팀이 제작하고 검증했습니다.
UTF-8 → GBK UTF-8 바이트를 GBK로 읽은 것입니다. UTF-8 여섯 바이트(E6 B5 8B E8 AF 95)가 GBK 세 글자로 다시 묶입니다.
UTF-8 → Windows-1252 같은 UTF-8 바이트를 Windows-1252로 읽은 것입니다. 1바이트 인코딩이라 여섯 바이트가 각각 한 글자가 됩니다.
복구 불가 아닙니다. 그 바이트는 디코딩 시점에 버려졌습니다. 주변 텍스트에서 복원할 수 있는 만큼 복원하고 나머지는 원본으로 돌아가 확보하십시오.
3바이트 대 2바이트 UTF-8에서 3바이트, EUC-KR에서 2바이트입니다. 칼럼 길이를 글자가 아니라 바이트로 정할 때 이 차이가 잘림 사고의 흔한 원인이 됩니다.
문자 깨짐(모지바케, mojibake)은 어떤 문자 인코딩으로 쓴 텍스트를 다른 인코딩으로 읽었을 때 나타납니다. 바이트는 멀쩡하고 해석만 틀린 것입니다. 복구가 가능한 이유가 바로 이 구분에 있습니다. 어떤 인코딩이 바이트를 썼고 어떤 인코딩이 그것을 잘못 읽었는지 알아내면, 그 실수를 거꾸로 되돌려 원문을 그대로 얻을 수 있습니다.
영어권이 쓰는 이름은 일본어에서 왔습니다. 文字化け, 대략 「글자가 변해 버림」이라는 뜻이며, 유니코드 이전 일본어 전산 환경에서 이 문제가 워낙 흔했던 탓에 그대로 표준 용어가 되었습니다. 한국어와 중국어, 일본어 텍스트가 라틴 문자 텍스트보다 훨씬 심하게 이 문제를 겪는 데에는 구조적인 이유가 있습니다. 이 언어들은 멀티바이트 인코딩을 필요로 하고, 멀티바이트 인코딩끼리는 바이트를 어떻게 묶을지에 대해 서로 다른 규칙을 갖기 때문입니다. 라틴 문자 문자열은 대개 순수 ASCII이고, ASCII에 대해서는 모든 인코딩의 해석이 일치합니다.
복구가 실패하는 경우는 정확히 하나뿐입니다. 디코더가 자기 인코딩에서 아무 의미도 없는 바이트를 만나면 그것을 보관하지 않고 U+FFFD로 치환한 뒤 버립니다. 그렇게 사라진 글자는 영구히 잃은 것입니다. 그 밖의 모든 경우는 되돌릴 수 있습니다.
// The mistake, in three lines of JavaScript
const bytes = new TextEncoder().encode('测试'); // UTF-8: E6 B5 8B E8 AF 95
new TextDecoder('gbk').decode(bytes); // '娴嬭瘯' ← mojibake
new TextDecoder('windows-1252').decode(bytes); // '测试' ← same bytes, other mistake 깨진 문자를 붙여넣으면 도구가 경로를 대신 열거합니다. UTF-8, GBK, GB18030, Big5, Shift_JIS, EUC-KR, Windows-1252, Windows-1251에 대해 「실제로 쓰인 인코딩 × 잘못 읽은 인코딩」의 모든 조합을 시도합니다.
같은 경로로 되돌렸을 때 입력이 글자 하나까지 재현되는 후보에만 무손실 표시가 붙습니다. 결정적인 검증이며, 순위만 매기는 추측으로는 어느 결과를 믿어도 되는지 알 수 없습니다.
각 후보에는 바이트를 쓴 인코딩과 그것을 잘못 읽은 인코딩의 이름이 붙습니다. 다음 주에 같은 문자열을 또 손보는 대신 원인을 고치려면 이 정보가 필요합니다.
입력에 이미 대체 문자가 들어 있으면 도구가 그 사실을 분명히 말하고 모든 후보를 부분으로 표시합니다. 디코딩 시점에 파괴된 정보는 돌아오지 않으며, 아닌 척하면 오후 시간만 낭비하게 됩니다.
아무 텍스트나 지원되는 모든 인코딩에서 16진수 바이트로 나란히 보여 주고, 반대 방향으로 16진수를 디코딩합니다. 칼럼 길이 산정, 패킷 덤프 판독, BLOB 내용 확인에 유용합니다.
디코딩은 브라우저 자체의 TextDecoder를 씁니다. 업로드도, 저장도, URL 재작성도 없습니다. 깨진 텍스트는 대개 운영 환경에서 곧바로 나오기 때문에 중요한 부분입니다.
娴嬭瘯
测试
두 한자는 UTF-8로 정확히 저장되어 있었고(바이트는 E6 B5 8B E8 AF 95), 그다음 어떤 프로그램이 그 6바이트를 GBK로 읽었습니다. GBK는 바이트를 두 개씩 묶으므로 두 글자가 아니라 세 글자가 나왔습니다. 레거시 Windows 프로그램이 UTF-8 파일을 열 때, 또는 데이터는 UTF-8인데 데이터베이스 연결 문자셋이 gbk로 잡혀 있을 때 나오는 모습입니다.
测试
测试
같은 바이트, 다른 실수입니다. Windows-1252는 1바이트 인코딩이므로 UTF-8 바이트 여섯 개가 각각 한 글자가 되었습니다. 라틴 문자권에서는 이 형태를 훨씬 자주 만납니다. café는 café가 되고 naïve는 naïve가 됩니다. Ã, Â, â 같은 글자와 엉뚱한 문장 부호가 짝을 지어 나타나는 것이 특징입니다.
B2 E2 CA D4
测试
깨진 문자가 아니라 패킷 덤프나 BLOB 칼럼에서 뽑아낸 16진수를 들여다보는 경우도 있습니다. 두 번째 구획에 16진수를 붙여넣고 인코딩을 고르십시오. B2 E2 CA D4는 GBK에서 测试입니다. 같은 두 글자가 UTF-8에서는 6바이트(E6 B5 8B E8 AF 95)를 차지하고, Windows-1252에서는 아예 표현되지 않습니다.
鏁版嵁搴�
(부분 복원만 가능)
数据库가 UTF-8로 쓰였다가 GBK로 읽혔는데, 마지막 바이트 쌍이 GBK에서 아무 의미도 없었기 때문에 디코더가 그것을 U+FFFD로 치환했습니다. 그 바이트는 사라졌습니다. 이 도구는 조용히 그럴듯한 답을 지어내는 대신 이런 상황을 그대로 표시합니다. 앞쪽의 数据는 여전히 복원할 수 있지만 마지막 글자는 복구가 불가능하므로 원본 데이터로 돌아가야 합니다.
인코딩을 먼저 알아낼 필요 없이 그대로 넣으십시오. 짧은 조각으로 충분하며, 열 몇 글자면 대개 경로가 특정됩니다.
무손실은 같은 경로로 되돌리면 입력이 글자 하나까지 재현된다는 뜻입니다. 부분은 그렇지 않다는 뜻이므로 결과를 단서로만 다루십시오.
각 후보에는 원문이 실제로 쓰인 인코딩과 그것을 잘못 읽은 인코딩이 함께 표시됩니다. 문장이 무엇이었는지뿐 아니라 상류에서 무엇을 고쳐야 하는지도 알려 줍니다.
두 번째 구획은 아무 텍스트나 흔한 인코딩 전부의 바이트로 보여 주고, 16진수를 반대 방향으로 디코딩합니다. 칼럼 길이를 정하거나 프로토콜 프레임을 확인할 때 쓰십시오.
정상적으로 보이는 문자열을 그래도 변환하면, 피하려던 그 깨짐을 직접 빚어내게 됩니다. 먼저 표시 상태를 확인하십시오. 글꼴이 없으면 네모(□□□)로 그려지고, 인코딩 문제라면 엉뚱한 글자로 그려진다는 점도 함께 기억하십시오.
iconv -f UTF-8 -t GBK correct.txt > broken.txt
# 현재 인코딩부터 확인 file -I correct.txt # charset=utf-8 → 변환할 것이 없음
MySQL 칼럼의 선언 문자셋을 고친다고 해서 그 안에 든 바이트가 다시 인코딩되지는 않습니다. latin1 데이터를 utf8로 선언하면 서버는 올바른 UTF-8이 아닌 바이트를 돌려주고, 드라이버가 그것을 U+FFFD로 치환하면서 데이터가 파괴됩니다.
ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
-- 바이트가 재해석되지 않고 보존되도록 이진 타입을 한 번 거친다 ALTER TABLE t MODIFY c VARBINARY(255); ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
부분으로 표시된 후보는 왕복 검증을 통과하지 못했습니다. 따라갈 가치가 있는 단서일 뿐, 데이터베이스에 그대로 써넣을 답이 아닙니다. 무손실로 돌아오는 것이 하나도 없다면 입력이 이미 정보를 잃은 상태일 가능성이 높으니 원본 바이트로 돌아가십시오.
// 배지가 무엇이라고 하든 첫 번째 후보를 취한다 db.update(row.id, candidates[0].text);
// 왕복이 성립하는 것만 써넣는다 if (candidates[0].lossless) db.update(row.id, candidates[0].text);
이미 bytes인 것에 encode를 부르거나 이미 str인 것에 decode를 부르면, Python 3에서는 ASCII를 한 바퀴 도는 대신 예외가 발생합니다. 경계에서 한 번만 디코딩하고 그 뒤로는 텍스트를 텍스트로 다루십시오.
text = raw.decode('utf-8').encode('gbk').decode('utf-8') # 파일이 실제로 쓰는 인코딩으로 경계에서 한 번만 디코딩
with open(path, encoding='gbk') as f:
text = f.read() TextDecoder가 제공합니다. 반대 방향은 더 까다롭습니다. TextEncoder는 UTF-8만 지원하기 때문에, 도구는 바이트 공간을 훑으며 각 열이 무엇을 뜻하는지 디코더에 되물어 역방향 대응표를 구성합니다. 그래서 이 대응은 언제나 브라우저 자신의 동작과 일치하며, 어떤 표도 사용자 기기로 내려보내지 않습니다.Content-Type, 파일 열기 호출, CSV 내보내기. 「시스템 인코딩」에 기대는 자리는 코드가 다른 장비로 옮겨 갈 때 같은 결함이 되살아나는 자리입니다.utf8은 문자당 최대 3바이트만 저장하므로 이모지와 일부 희귀 한자가 조용히 잘려 나갑니다. utf8mb4가 진짜 UTF-8입니다. 이것은 문자 깨짐과 다른 종류의 고장이고 바이트가 실제로 없어진 것이므로 이 복구 도구로는 손쓸 수 없습니다.iso-8859-1과 latin1을 모두 windows-1252의 다른 이름으로 취급합니다. 실제 차이는 0x80–0x9F 구간뿐이며, 진짜 ISO-8859-1은 그 자리에 제어 문자가 있고 Windows-1252에는 em 대시나 둥근 따옴표 같은 출력 가능한 문장 부호가 있습니다. 깨진 문자에 튀어나오는 것이 바로 그 출력 가능한 기호들이므로 실무에서는 Windows-1252가 더 쓸모 있고, 이 도구는 두 이름을 한 항목으로 묶어 보여 줍니다. TextDecoder로 처리되며 네트워크로 나가는 것도, 저장소에 쓰이는 것도, URL에 덧붙는 것도 없습니다. 이 도구에서는 그 점이 평소보다 더 중요합니다. 복구해야 하는 텍스트는 거의 언제나 운영 로그나 고객 레코드, 데이터베이스 덤프에서 나오는데, 그것들이야말로 서버 쪽 도구에 붙여넣으면 안 되는 것들이기 때문입니다. iconv -f CP949 -t UTF-8 input.txt > output.txt, PowerShell에서는 Get-Content -Encoding Default in.txt | Set-Content -Encoding UTF8 out.txt입니다. 대표적인 한 줄을 먼저 이 페이지에 넣어 어떤 인코딩을 지정해야 하는지 확인하십시오. 파일 전체에 방향을 거꾸로 걸면 한 줄짜리 문제가 천 줄짜리 문제가 됩니다. 인코딩 & 포매팅
ASCII 128자 전체 코드표. 10진수, 16진수, 8진수, 2진수 대조와 문자↔ASCII 코드 양방향 변환. 제어문자는 이스케이프와 캐럿 표기까지 정리한 온라인 도구.
인코딩 & 포매팅
Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.
인코딩 & 포매팅
Base64 문자열이나 데이터 URI를 온라인 브라우저에서 이미지로 디코딩합니다. 미리보고, 치수와 MIME을 읽은 뒤 PNG, JPG, GIF, SVG로 다운로드하세요. 업로드 없음.
인코딩 & 포매팅
브라우저에서 CSV를 JSON으로 변환합니다. RFC 4180, 타입 추론, 헤더 행, 큰 정수 안전 처리. 100% 비공개, 업로드 없음.
인코딩 & 포매팅
.env 파일을 붙여넣으면 즉시 JSON으로 변환됩니다. 데이터베이스 비밀번호, API 키, 토큰이 브라우저를 절대 벗어나지 않는 100% 비공개 무료 온라인 dotenv 파서입니다.
인코딩 & 포매팅
온라인에서 HTML 엔티티를 디코딩하고 HTML을 언이스케이프하세요. 무료, 가입 불필요, 100% 브라우저에서 처리. 이름·10진수·16진수 참조를 문자로 되돌리며 업로드 없음.