R 한글 인코딩 문제 (KoNLP 작업 과정에서…)

처음 R CRAN에 등록하고 참 많은 것들을 해본거 같다.

가장 큰 문제였던 것들은 윈도우 머신에서 오동작 하는 문제와 json 포맷 파일을 윈도우에서 읽어 오지 못하는 문제였다. 일단 맥과 리눅스에서는 잘 돌아가는 것을 확인 했지만 결국 위 두 가지 문제를 해결하면서 맥과 윈도우도 UTF-8에서만 잘 도는 것이였음이 밝혀졌다.

일단 한글 처리 패키지이기 때문에 CJK관련 문자 인코딩에 따른 윈도우 머신의 특성 문제가 있었으며 R의 문자열 인코딩 처리 방식 그리고 자바의 인코딩 처리 방식에 대한 인터페이싱을 맞춰줄 필요가 있었다. 인코딩 문제에 관해서 다뤄본 문제들 중에서는 가장 복잡도가 큰 문제였지 않을까 싶다.

일단 자바는 유니코드 기반의 UTF-8로 통일된 인터페이싱이기 때문에 간단히 넘어갔고…

R의 경우 로케일에 따라서 문자열 인코딩을 암묵적으로 처리하게 되는데 이걸 이해하는데 시간이 좀 걸렸다.

윈도우의 경우 CP949가 한글 윈도우의 기본 인코딩이라서 이를 문자열 인코딩 하는데 사용한다.

단 문자열의 “Encoding(str)” 함수 결과값이 “unknown”일 경우에만 localeToCharset()함수를 참고해 로케일에 따른 인코딩을 잠정적으로 인지하고 문자열 디코딩을 할때 CP949로 풀어서 보여준다.

물론 UTF-8 한글 문자열도 잘 보여준다.

 

   1: > localeToCharset()

   2: [1] "CP949"

   3: > sent <- "R은 free 소프트웨어이고"

   4: > Encoding(sent)

   5: [1] "unknown"

   6: > localeToCharset()

   7: [1] "CP949"

   8: > sent2 <- iconv(sent, localeToCharset()[1], "UTF-8")

   9: > sent2

  10: [1] "R은 free 소프트웨어이고"

  11: > Encoding(sent2)

  12: [1] "UTF-8"

  13: > Encoding(sent2) <- "CP949"

  14: > sent2

  15: [1] "R\xec\x9d\u0080 free \xec냼\xed봽\xed듃\xec썾\xec뼱\xec씠怨\xa0"

  16: > Encoding(sent2)

  17: [1] "unknown"

  18: > sent == sent2

  19: [1] FALSE

  20: > Encoding(sent2) <- "UTF-8"

  21: > sent == sent2

  22: [1] TRUE

  23: > nchar(sent) == nchar(sent2)

  24: [1] TRUE

 

위 코드는 한글 윈도우에서 도는 R의 문자열의 인코딩 특징을 잘 보여주는 테스트이다.

애초에 sent문자열은 “unknown”으로 잡힌다. 무려 CP949인코딩임에도 그렇게 표현된다. 왜냐면 R에서 인코딩에 대한 구분은 latin1, UTF-8, bytes 이 세가지 이기 때문이다. 따라서 unknown으로 잡힌 것들을 어떻게 디코딩 해서 보여주느냐는 locale을 통한 예상을 통해서이다. 다행히 예제에서 localeToCharset()결과가 CP949로 나오기 때문에 인코딩 정보가 “unknown”인 문자열임에도 잘 보여준다.

이를 UTF-8로 iconv를 해서 변환하게 되면 결과적으로 Encoding()은 UTF-8이 되고 그냥 출력해도 R쉘에서는 UTF-8 문자열을 잘 보여준다.

이래서 R은은 멀티 인코딩을 지원하는 플랫폼이라고 하는거 같다.  하지만 이것을 이해하기 위해서 너무 멀리 돌아 온거 같다는 느낌이 든다.

일단 이렇게 좀 복잡하지만 규칙이 있기 때문에 문자열 처리하는게 가능하지 않았을까 한다.

이 문제와 JVM 띄울때 –Dfile.encoding=UTF-8 옵션을 주지 않아서 기본 로케일을 가지고 json 파일을 디코딩 하는 바람에 json 파일 리딩 오류가 난거(그것도 윈도우에서만…)…. 이렇게 두가지 문제 때문에 대한 해결책을 찾느라 어제 저녁 예거밤 두잔을 원샷했다. 쩝.. ㅠㅠ 

 

 

아래는 윈도머신에서 패키지가 돌아가는 화면이다…

 

image

 

이번 고생으로 인해… 이 기종 언어, OS간의 한글 인코딩 문제들에 대해서 많은 생각을 해보게 되었는데, 추후 패키지 발전을 위한 큰 밑걸음이였다고 생각한다.  

 

일단 이 패키지를 윈도우에서 사용하고자 하는 분들은 KoNLP 0.0-7.3 이상의 버전을 사용하길 추천한다.

CC BY-NC 4.0 R 한글 인코딩 문제 (KoNLP 작업 과정에서…) by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.