윈도우에서 맥/Linux 로 가져온 한글 text파일 내용의 깨짐현상 한꺼번에 해결하는 법
요약 : 윈도우에서 맥으로 가져온 txt파일이나 smi파일 등을 일일이 하나씩 인코딩을 고쳐주는 것은 번거롭다. 여기서는 폴더 내의 모든 파일들의 인코딩을 한번에 유니코드로 변환하는 방법을 소개한다 (shell script 를 사용하지만 누구나 따라하면 사용가능)
한글 인코딩 문제 - EUC-KR과 UTF-8
윈도우에서 맥으로 가져온 텍스트파일이나 동영상 자막 파일들은 모두 깨져서 나온다.
그 이유는 같은 텍스트파일이라도 윈도우에서는 오늘날의 표준인 유니코드(UTF-8)를
쓰지 않고 과거의 EUC-KR 인코딩을 쓰고 있기 때문이다.
(윈도우가 하위호환성에 집착한 결과이다)
간혹 외국 자료를 받아 압축을 풀면 문자가 깨지거나 압축이 안풀리거나
때로는 압축이 아예 "damaged" 즉 손상되었다는 메시지를 내는 경우가 있는데
이것은 근본적으로 윈도우가 유니코드를 사용하지 않고 있어서 생기는 문제이다.
(그런 파일들은 맥에서 압축을 풀면 잘 풀린다)
어쨌건 윈도우에서 리눅스로, 또는 윈도우에서 맥으로 가져올 때
텍스트파일의 한글 인코딩 문제는 항상 골치아픈 문제일 수밖에 없다.
해결법 1 - 파일 하나씩 수작업 변환
이는 문제가 생기는 텍스트파일을 텍스트파일 에디터에서 로드해서
UTF-8 로 저장하면 해결되는 문제이기는 하지만, 많은 파일들을
일일이 그렇게 작업하기는 번거로운 일이다.
따라서 여기서는 shell scripting 을 이용해
폴더 내의 txt 파일이나 smi, srt 파일들을 모두 한꺼번에
유니코드로 변환하는 간단한 방법을 알아보도록 하자.
해결법 2 - 편리한 자동변환 (UNIX Shell Script 사용)
1. 우선 다음과 같은 스크립트를 짠다.
find "$1" -name "*.smi" -o -name "*.srt" -o -name "*.txt" | while read filename
do
tempName=${filename}~temp~.txt
mv "$filename" "$tempName"
iconv -c -f euc-kr -t utf-8 "$tempName" > "$filename"
rm "$tempName"
done
2. 스크립트 저장 (~/scripts/myuni 에 저장)
home 폴더에 scripts 라는 폴더를 만들어서 myuni 라는 이름의 텍스트 파일로 저장한다.
저장할 때는 UTF-8 (no BOM) 인코딩으로 저장하면 된다.
3. 패스 지정 (~/.profile 수정)
home 폴더에 .profile 이라는 텍스트 파일을 만들어서 다음과 같이 써준 후 저장한다.
export PATH=~/scripts:$PATH
.profile 파일은 hidden file 이므로 파인더에서 보이지는 않는다.
4. 사용법 (myuni [폴더명]으로 사용)
이제 끝났으므로 컴퓨터를 리붓하자.
이제는 Terminal 을 띄우고
myuni [폴더명]
이라고 실행하기만 하면 된다.
그러면 그 폴더에 있는 smi, srt, txt 파일이 모두 유니코드로 변환된다.
팁 : 원하는 폴더를 Terminal 로 drag and drop 하면 폴더경로를 전혀 타이핑 할 필요가 없다.
테스트해보지는 않았으나 리눅스 등에서도 유용한 방법이다.
주의 :
주의할 점은, 폴더 내에 UTF-8 로 인코딩돼있는 파일이 들어 있을 경우
그 파일 역시 자동변환되는데 이렇게 되면 스크립트가 EUC-KR 을 가정하므로
그런 파일은 깨져버리게 된다.
지정하는 폴더는 반드시 EUC-KR로 인코딩된 파일만 들어있는 것으로 해주도록 한다.
참고 : 윈도우 인코딩과 EUC-KR 의 엄밀한 차이점
TextWrangler 에서 윈도우에서 가져온 text 파일을 load 할 때, Korean (Windows, DOS) 인코딩으로 읽으면 잘 읽히는데 EUC-KR 인코딩으로 읽으면 못읽는다며 에러가 나는 경우가 있다. 이는 엄밀히 말하면 EUC-KR 과 윈도우 인코딩이 완전히 같은 것은 아니기 때문인데, EUC-KR 은 CP1252 이고 윈도우 인코딩은 CP949 가 정확하다고 한다. 다만 EUC-KR 즉 CP1252 은 CP949의 subset 으로, 거의 같게 봐도 무방하고 실제로 둘을 혼용해서 생각해도 별 문제는 없다.
레퍼런스 :
evolution과 팜 한글로 싱크하기
유니코드로 변환시 BOM 값의 중요성
키워드 : bash, window, encoding, korean, unicode, space, convert, 깨짐 현상, 해결법, Set Path, 폴더 내의 모든 텍스트 파일 인코딩 자동 수정하기, Linux