본문 바로가기
Pyhton

read csv에 \ufeff 가 생길때

by Django_ 2020. 3. 30.
반응형

python을 활용하여 .csv 파일을 읽는 경우가 상당히 많이 있습니다.

csv

csv는 쉽게 생각하면 엑셀 및 스프레드시트와 같은 프로그램에서 필수 데이터만 나열한 것이라고 생각하시면 될 것 같습니다.  자세한 사항은 여기에서 확인해보세요~

 

 python에서 읽을때 [ 0, 0 ]째 값에 \ufeff가 붙어있는것을 누구는 보이고 누구에게는 안 보이는 상황이 발생하는데요

csv.read().decode('utf-8')

['\ufeffmain text','next text']

이러한 경우는 윈도우 시스템에 의해 작성된 문서일 경우 작성이 되는 경우가 대부분입니다.

(윈도우 유저의 경우 흔하게 볼 수 있습니다.)

이유는 바로 Byte Order Mark(BOM)

byte order mark에 대한 내용은 해당 블로그에 자세히 기술되어 공유드립니다~

 

wystan's tales > UTF-8 인코딩에서의 BOM(Byte Order Mark) 문제

다양한 언어를 표현할 수 있도록 해주는 유니코드(Unicode) 인코딩에는 여러가지 방식이 있습니다. 최근 웹 환경에서 많이 쓰이는 UTF-8을 비롯해서 UTF-16, UTF-32 등이 이런 인코딩 방식을 나타내지요. 이렇게 비슷한 방식을 사용하는 문서는 Byte Order Mark(BOM)로 구별이 됩니다. 문서 맨 앞에 눈에 보이지 않는 특정 바이트(byte)를 넣은 다음 이것을 해석해서 정확히 어떤 인코딩 방식이 사용되었는지 알아내는 방법이지요. 그

blog.wystan.net

해결 방법은 아주 간단합니다~

#csv.read().decode('utf-8')
csv.read().decode('utf-8-sig')

['main text','next text']

.decode()에 "utf-8-sig"를 적용하시면 해결하실 수 있습니다~

sig는 signature의 약자이며 +"-sig" 가 붙으면서 "\ufeff"는 문자열이 아닌 인코딩 정보로 인식하게 되어 해당 문자는 표시되지 않게됩니다.

의외로 간단하죠~?

반응형

댓글