XML 은 ascii 나 utf8 밖에 지원되지 않습니다 (-_-) 대체 왜?
<?xml version="1.0" encoding="ks_c_5601-1987"?>
이로 인해 위와 같은 xml 문서는 encoding 부분을 읽어서 어떤 인코딩으로 되어있는지 파악한 다음
utf8 문서로 변환해주어야 합니다.
encoding="코덱" 을 찾아내는 방법은 여러가지가 있겠지만;
코드 분량 문제라던지 처리 속도 문제등으로 인해 가능하면 정규 표현식을 사용하는 것이 좋습니다.
import re
RE_XML_ENCODING = re.compile("encoding[ \t]*=[ \t]*\"([^\"]+)\"")
encoding까지 매치하고
스페이스나 탭과 같은 공백 문자가 있는지 체크하고
= 매치하고
다시 공백 문자 체크한 다음
"에서 ~ "까지를 그룹으로 설정하는 정규 표현식입니다.
이걸 이용해서 어떤 encoding 을 알아내는 함수나
def getXMLEncoding(data):
head = data[:100]
headline = head.splitlines()[0]
mo = RE_XML_ENCODING.search(headline)
return mo.group(1) if mo else None
아예 전체를 유니코드로 변환시켜 버리는 함수를 만들 수 있습니다.
def decodeXML(data):
head = data[:100]
headline = head.splitlines()[0]
mo = RE_XML_ENCODING.search(headline)
if mo:
encoding = mo.group(1)
return data[len(headline):].decode(encoding)
else:
return data


python 을 좋아하는 게임 프로그래머