반응형

  데이터 수집을 위해 웹 크롤링 등을 하다보면, 간혹 웹페이지의 문자가 EUC-KR 인코딩 되어 있는 경우가 있습니다. 하지만 Julia는 UTF-8이 기본 인코딩이기 때문에 EUC-KR을 UTF-8로 변환하지 않으면 아래처럼 괴상한 문자를 보게 됩니다.

<td>��Ÿ ��ǰ fv��</td>
<td>�λ��ǰ(ȫ�����, ȫ��d)</td>

  과거에 python 2와 3을 넘나들면서 사용할 때에도 간혹 문자가 EUC-KR이냐 UTF-8이냐에 따라 신경 써야했던 기억이 있었는데, Julia의 경우는 처음에 이걸 해결하지 못해서 정말 고생했었습니다. 국내에 해결책을 설명해주신 분도 없었을 뿐더러, 구글링을 해봐도 다른 언어에 비해서 한글은 비중이 낮아서 그런지 타 언어의 해결책으로는 쉽게 되지 않았습니다. 페이스북 Julia Korea 그룹에서도 어느 분이 질문을 하셔서 저의 해결책을 알려드렸었는데, 곧 아래에서 보시겠지만 깔끔한 방법은 아닙니다. 더 좋은 해결책을 찾으신 분이 계시면 알려주셨으면 합니다.

  우선 StringEncodings 패키지를 설치합니다.

using Pkg; Pkg.add("StringEncodings")

  저는 아래와 같이 euckr_to_utf8이라는 이름의 함수를 만들어 쓰고 있습니다.

using StringEncodings

function euckr_to_utf8(txt::String)
    return read(StringDecoder(IOBuffer(txt),"EUC-KR","UTF-8"),String)
end

위 함수의 아큐먼트는 String타입입니다. 따라서 웹크롤링 중에 받아온 EUC-KR 문자열은 가급적 String("EUC-KR인코딩의 문자열")으로 String타입으로 한번 변환해서 넘겨주시길 바랍니다.

  많이 지저분하죠? EUC-KR 문자열을 String으로 변환 후 함수에 넘겨주면, IOBuffer로 바꾸었다가 StringDecoder로 간신히 EUC-KR을 UTF-8로 변환하는데, 이를 read를 통해 String으로 받아옵니다.

  주의! StringEncodings를 쓰다보면 가끔 Julia 버전을 바꾸고 나서 juno 환경에서 패키지들의 버전의 문제인지 작동을 하지 않을 때가 있습니다. 위의 코드를 쓰는 데, Julia와 juno 버전을 바꾸고 작동을 하지 않는다면 패키지들의 버전들을 업데이트 해보세요. 어떠한 오류 메시지도 없이, 실행이 안끝나는 상황을 맞이하게 될 겁니다.

반응형

+ Recent posts