python3 부터는 ANSI 기준으로 작성된 파일만 읽을 수 있습니다. 그래서 UTF-8로 작성된 파일은 보통 방법으로 읽을 때 에러가 납니다. 다음과 같이 말이죠.


UnicodeDecodeError: 'cp949' codec can't decode bytes in position ~~~~


그래서 우리가 읽으려는 파일의 인코딩 형식을 변환해주어야 합니다.


1. 리눅스에서 변경하기

블로그에 iconv 에 대한 설명이 있습니다. (http://amornatura.tistory.com/42

그냥 UTF-8에서 cp949(ANSI)로 파일을 변환하면 되기 때문에 다음과 같이 입력해줍니다.


iconv -f UTF-8 -t CP949 -o rename.txt original.txt


간단합니다. 


2. 파이썬3 에서 그냥 읽어오기

사실 윈도우에서 작업하게 되면 다른 프로그램들을 써서 변환해야 하기 때문에 매우 번거롭습니다. 리눅스에서도 많은 양의 파일을 변환하려면 일이죠. (뭐...1분이면 되지만요...ㅎ)


파이썬3 에서 직접 UTF-8 문서를 읽어올 수 있습니다. 자세한 내용은 다음의 링크를 따라가보세요.

(http://www.evanjones.ca/python-utf8.html)


위의 사이트에서 설명해주는 내용을 따라하면, 


import codecs

fileObj = codecs.open( "read.txt", "r", "utf-8" )

u = fileObj.readlines()


for i in u :

print(i)

print("\n")



codecs 라는 라이브러리를 불러와서 파일의 형식을 지정해준 후 읽어옵니다. 읽을 때 read()로 하면 한글자씩, readlines()하면 단위줄로 읽어오죠. 


쉽죠? 

도스에서 작업한 txt파일을 리눅스에서 불러와 작업하면 상당히 애로사항이 많게 됩니다. 

파일을 편집하다 보면 뒤에 ^M이 생기는 것도 볼 수 있구요... -.-
이외에도 윈도우에서는 UTF-8로 기본 저장하지 않기 때문에 가끔 문제를 일으키기도 합니다.

하지만 리눅스에선 간단히 파일의 인코딩과 속성을 바꿀 수 있어요.

우선 파일의 속성을 살펴보기 위해 다음과 같이 입력합니다.
file test.txt
만약 도스에서 편집된 파일이면 다음과 같이 나옵니다.

test.txt: ISO-8859 text, with CRLF line terminators

이제 파일을 변환해주기 위해 다음과 같이 명령어를 입력합니다. 
dos2unix test.txt
만약 dos2unix 가 설치되어 있지 않다면.... 
sudo apt-get install dos2unix 로 설치해주세요. ^^ 이제 file test.txt 를 다시 입력해 상태를 확입합니다.

test.txt: ISO-8859 text

이제 인코딩을 바꾸어줄 순서인데요. iconv 라는 명령어와 recode 라는 명령어 두개가 있습니다. recode의 경우 *.txt를 지원해서 참 편리하지만... 이상하게도 제가 가지고 있던 파일에선 UTF-8로 변환시 한글이 왕창 깨지더군요..ㅠㅠ 저는 iconv로 변환했을 때 한글이 깨지지 않았습니다. 

iconv -f EUC-KR -t UTF-8 test.txt > test.txt1

위와 같이 입력해주는데 처음에는 현재 인코딩을, 두번째에는 원하는 인코딩을 쓰시면 됩니다. *.txt를 지원하지 않기 때문에 배치파일을 만들어서 쓰시거나 노가다를 좀 해주시면 됩니다... (라고 무책임하게 말하기ㅡ.ㅡㅋㅋ)

다시 file 명령어를 이용해 속성을 확인해보면, 

test.txt: UTF-8 Unicode text

그리고 vi를 이용해 한글이 깨졌는지 확인해보면...! 깨지지 않았죠? (전 안깨졌어요...ㅋ)

많은 파일을 쉽게 변환하는 팁을 알려드리면... 결과파일의 파일이름을 쓸 때 확장자를 조금만 바꾸어주세요. 우분투의 경우 rename 이라는 명령어(별도로 설치하셔야합니다.)를 이용해 간단히 바꿀 수 있어요. 

참고로 recode로 인코딩을 바꾸는 방법은 아래와 같습니다.

 recode -f EUC-KR *.txt

자세한 옵션설명은 구글에서 검색해보세요. ^^

'Study > Computer' 카테고리의 다른 글

Linux에서 Memory 정보 확인하기  (0) 2012.07.31
Linux에서 Valgrind 사용하기  (0) 2011.08.11
MS-SQL to MySQL  (0) 2011.02.26
프랙탈 그림 그리기 (Z^3-1=0)  (0) 2010.04.19
윈도우에서 gcc를 쓸 수 있다?  (2) 2010.01.05

+ Recent posts