자주 묻는 질문
한글 인코딩 깨짐과 복구에 관한 15개 질문.
- Q1. EUC-KR 과 CP949 의 차이는 무엇인가요?
- EUC-KR 은 1987년 표준화된 한글 2,350자의 완성형 인코딩이고, CP949 는 Microsoft 가 1996년 여기에 8,822자를 추가 확장한 Windows 한국어 기본 코드 페이지입니다. 대부분의 문자는 두 인코딩에서 동일한 바이트지만, "뷁, 똠방" 같은 확장 한글은 CP949 에만 있습니다. 실무에서 "EUC-KR" 이라 부르는 것 대부분이 사실 CP949 입니다.
- Q2. 제가 붙여넣은 텍스트가 서버로 전송되나요?
- 아니요. 모든 복구 로직은 페이지에 로드된 브라우저의 TextEncoder / TextDecoder API 로 실행됩니다. 페이지가 한 번 로드되면 네트워크를 끊어도 동작합니다. 개발자 도구의 Network 탭을 열고 입력해 보면 업로드 트래픽이 전혀 없는 것을 확인할 수 있습니다.
- Q3. ZIP 파일 안의 한글 파일명이 깨졌습니다. 이 툴로 한번에 복구할 수 있나요?
- 현재 버전은 깨진 문자열 1건을 입력하는 단건 복구 전용입니다. 파일명을 하나씩 붙여넣어 복구 후보를 받고 수동으로 개명하세요. 대량 ZIP 파일명 일괄 복구는 macOS 의
unar, 크로스플랫폼7z e -scrc, Windows 의 BandiZip 한국어 모드가 더 편합니다. 일괄 처리 전용 파생 툴은 로드맵에 있습니다. - Q4. 왜 후보를 1개가 아니라 5개나 보여주나요?
- 짧은 문자열이나 이중 변환된 문자열은 점수가 동률이거나 1·2위 차이가 작습니다. 강제로 1위만 보여주면 틀린 답을 내미는 경우가 잦아 상위 5개를 모두 노출하고 사용자가 맥락에 맞는 것을 고르게 합니다. 후보 옆의 "점수" 는 한글 음절 비율 + ASCII 정상성에서 U+FFFD 치환 문자와 라틴 확장 영역 비율을 뺀 값입니다.
- Q5. U+FFFD (�) 가 들어간 문자열도 복구되나요?
- 복구할 수 없습니다. U+FFFD 는 "이 바이트는 이미 디코딩 실패로 버려졌다" 는 유니코드의 공식 치환 문자입니다. 원본 바이트가 존재하지 않으므로 어떤 툴로도 복원 불가능합니다. 깨짐이 발생하기 이전 단계(원본 파일, 원본 URL, 원본 DB row)에서 가져오세요.
- Q6. URL 에
%EC%95%88%EB%85%95같은 문자열이 있어요. 어떻게 복구하나요? - 그대로 입력창에 붙여넣으면 됩니다. 이 툴은
%XX패턴을 감지해 바이트 배열로 변환 후 UTF-8/EUC-KR 로 디코딩해 후보에 포함시킵니다. 이중 인코딩(%25EC%2595%2588…) 도 자동 감지해 2단계 디코딩을 시도합니다. - Q7. 이메일 제목이
=?UTF-8?B?...?=로 옵니다. 디코딩되나요? - 현재 버전은 MIME encoded-word (RFC 2047) 의 Base64 부분을 자동으로 풀지 않습니다.
?B?뒤의 Base64 문자열만 따로 Base64 디코더로 푼 뒤, 그 결과(또는 바이트 표현)를 이 툴에 넣으세요. encoded-word 자동 파싱은 로드맵에 있습니다. - Q8. 복구 결과가 여전히 깨져 보입니다. 왜인가요?
- 가능성 3가지: (1) 깨짐 체인이 3단계 이상이라 2개의 인코딩 조합만으로는 복원 불가, (2) 문자열에 U+FFFD 가 섞여 있어 바이트가 이미 손실, (3) 실제로는 한자·일본어가 섞여 있어 한글 점수가 낮게 나옴. 1번의 경우 결과를 다시 입력창에 넣고 한 번 더 복구를 시도하면 풀리기도 합니다.
- Q9. 한자·일본어가 섞여 있는 경우에도 쓸 수 있나요?
- 가능합니다. 점수 함수는 한글 음절 비율이 가장 크게 반영되지만 CJK 공통 영역도 양의 가중치를 가집니다. 다만 순수 일본어 mojibake 는 일본어 전용 툴(예: ftfy, 프로젝트 예정인 일본어 mojibake 복구기)이 더 정확합니다.
- Q10. 공유 URL 복사 버튼은 어디에 쓰나요?
- 입력창의 깨진 문자열을
?q=파라미터에 그대로 실어 공유 URL 을 만듭니다. 동료에게 "이거 어떻게 복구돼?" 하고 전달할 때 유용합니다. 주의: 민감한 데이터는 URL 에 실리므로 공유 범위에 신중하세요. - Q11. MySQL 에서 한글이
안녕으로 보입니다. 어떤 조합인가요? - 원본은 UTF-8 바이트 (
EC 95 88 EB 85 95) 인데 클라이언트가 Latin-1 로 해석한 고전적 케이스입니다. 이 툴의 첫 번째 후보 "UTF-8 → Latin-1" 이 정확히 이를 풀어줍니다. 근본 해결은SET NAMES utf8mb4또는 connection charset 을 고치세요. - Q12. 한글 자모가 분리된 (
ㅇㅏㄴㄴㅕㅇ) 문자열도 복구되나요? - 인코딩 단계의 깨짐이 아니라 유니코드 정규화(NFD) 이슈이므로 별도 경로가 필요합니다. 입력이 NFD 분리 자모라고 감지되면 향후 버전에서
normalize("NFC")복원 후보를 추가할 예정입니다. 임시 해결로는 JavaScript 콘솔에서"ㅇㅏㄴㄴㅕㅇ".normalize("NFC")를 실행하면 됩니다. - Q13. 업무에 활용해도 괜찮나요?
- 텍스트가 서버로 전송되지 않으므로 사내 데이터에 활용해도 안전합니다. 다만 공유 URL 기능을 쓰면 URL 에 원문이 실리므로, 개인정보·영업비밀이 포함된 경우 공유 URL 은 사용하지 마세요.
- Q14. 모바일에서도 쓸 수 있나요?
- 네. iOS Safari, 안드로이드 Chrome, 삼성 인터넷 모두 TextEncoder/TextDecoder 를 지원합니다. 복사 버튼은 iOS 16+ 에서 navigator.clipboard API 로 동작합니다.
- Q15. 오픈소스인가요?
- 현재는 소스 공개 전이지만 핵심 복구 로직은
src/lib/encodingFixer.ts한 파일에 들어 있으며 표준 브라우저 API 만 사용합니다. 개별 요청이 많으면 공개를 검토하겠습니다.