Development

RStudio read.csv() 한글 깨짐

건이두 2019. 8. 31. 12:08
728x90

어제, 오늘, RStudio에서 read.csv()로 한글이 들어 있는, CSV파일을 로딩할 때, 계속 한글이 깨저나와서 이런저런 시도를 해보며, 적지 않은 시간을 보내서, 해당 내용을 공유해 드리려고 합니다. 결과적으로 한글이 잘 나오게는 되었습니다. ^^

테스트한 환경

  • OS : Windows 10,
  • R : 3.6.1
  • RStudio : 1.2.1335

우선은 데이터가 UTF-8이어야 함

엑셀을 사용해서 법정동코드(실제주소) 엑셀파일(아래 참고)을 열고, UTF-8의 CSV 형태로 저장합니다.
KIKcd_B.20190701.xlsx

read.csv() UTF-8이 맞나? CP949가 맞나?

한글이 포함된 CSV 파일을 읽어올 때, 깨지는 문제에 대해서 검색해 보면, Mac에서 한 방법, UTF-8으로 하면 된다고, 적혀있기도 하고... 몇가지 해결방안 들이 나오는대... 이 글에서 무엇이 맞는지 좀더 알아 보겠습니다.

Windows에서 한글이 어떻게 처리되는가?

R을 떠나서, Windows에서는 한글이 처리되는 방식을 알아 봅시다, 아래와 같이 크게 2가지 방식으로 처리 합니다.

  • UTF-8 <- 유니코드(Unicode)
  • CP949 <- 유니코드 아님(Non-Unicode)

어떤 방식으로 처리할지는 해당 어플리케이션이 컴파일될 때, 유니코드 버전으로 컴파일을 하면 UTF-8으로 처리되고, 그렇지 않으면, CP949로 한글을 처리하도록 컴파일이 됩니다.

R에서는 한글이 어떻게 처리되는가?

그럼 RStudio(or R)은 한글을 어떤 방식으로 처리하는가? 하는 질문이 따라 오게 됩니다. 제가 확인한 바로는 아래와 같습니다.

  • R은 데이터를 읽어 올때는 UTF-8및 다양한 인코딩 사용가능
  • 읽어온 데이터를 출력할 때는, Non-Unicode 방식으로 처리 합니다.

즉, 읽어 올 때는, 다양한 인코딩을 사용할 수 있기 때문에, read.csv()에 fileEnfileEncoding 인자를 명확히 지정해야 합니다. 여기서는 법정도주소 파일을 엑셀을 사용해서, UTF-8 명시적으로 변환했기 때문에 fileEnfileEncoding = 'UTF-8' 이 맞습니다.

읽어오는 것까지는 해결이 되었구요, 문제는 화면에 보이기 입니다. 이 부분은 Windows의 '설정' 부분을 좀 자세히 들여다 봐야 합니다.

Non-Unicode어플리케이션일 때, Windows는 어떻게 인코딩을 결정하는가?

앞에서 Windows가 Non-Unicode일 때, CP949로 처리한다고 말씀 드렸는대, 사실 CP949는 Non-unicode인대 한글을 사용할 수 있는 Non-Unicode 인코딩 방식 중에 하나입니다.

euc-jp(일본어의 경우)등 여러가지 인코딩을 사용할 수 있습니다. 문제는 어플리케이션이 컴파일될 때, 사용한 인코딩옵션이 CP949이고, CP949로 맞게 설정하면, 글자가 잘 보이구요, 틀리면 글자가 깨저 나와요. 어떤게 맞는지 알 수 있는 방법이 없습니다. 이런 문제 때문에 Unicode를 사용해서, 인코딩을 맞춰야 하는 문제를 해결한 것이지요.

Windows의 '설정'에서는 아래 그림과 같습니다. '한국어'를 선택하면, Non-Unicode어플리케이션이 언어를 처리할 때, CP949 인코딩이 사용됩니다.

RStudio(or R)은 언어를 화면에 표시 할때, 어떤 인코딩을 사용하는가?

제가 확인한 바로는 바로 위의 Non-Unicode에서 설정한 인코딩을 사용합니다.

따라서, 언어를 화면에 표시할 때는, CP949를 사용하는 것 같습니다.

즉, read.csv()에서 encoding = 'CP949'를 사용하는 것이 맞습니다. 제가 테스트한 환경에서는 자동으로 Non-Unicode인코딩을 사용해서, 따로 encoding 인자를 주지 않아도, 자동으로 CP949를 사용하는 것으로 생각됩니다.

마지막으로 예외의 경우 Windows 표시 언어 가 '한국어' 가 아닌경우

사실 제가 이 경우여서, 해결하는대 시간이 많이 걸렸습니다. 결론 부터 이야기 드리면, 'Windows 표시 언어' 를 '한국어'로 사용하세요. 이 부분이 'English'(영어)로 설정되어 있다면, 한글 CSV를 화면에 올바르게 표시할 방법이 없습니다.

아래와 같이 df 라는 데이터 프레임이 CP949로 되어 있기 때문에, Windows 표시 언어가 꼭, 한국어로 되어 있어야 합니다.

 

728x90