parsing xml on python. unknown encoding

symptom:
SOAP 통신 서버 시뮬레이터에 xml 파서인 ElementTree에 fromString 메서드에서

"ExpatError: unknown encoding" 에러를 발생시켰다.

--------------------------------------------------------------------------------------
  File "/usr/local/lib/python2.6/SocketServer.py", line 322, in finish_request
  File "khubOiServerOri.py", line 320, in response
  File "/usr/local/lib/python2.6/xml/etree/ElementTree.py", line 1245, in feed
    method()
  File "khubOiServerOri.py", line 125, in do_POST
  File "khubOiServerOri.py", line 177, in recvHandler
  File "/usr/local/lib/python2.6/BaseHTTPServer.py", line 329, in handle
    self.handle_one_request()
    self._parser.Parse(data, 0)
  File "/usr/local/lib/python2.6/BaseHTTPServer.py", line 323, in handle_one_request
192.168.151.30 - - [19/Oct/2015 14:14:08] "POST / HTTP/1.1" 200 -
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/local/lib/python2.6/SocketServer.py", line 617, in __init__
    reqDic = parseOi.parseOi(raw)
  File "/home/pis/SIM/lib/parseOi.py", line 37, in parseOi
    root = ET.fromstring(uRawData)
    method()
    rspData = self.response(paramDic)
ExpatError: unknown encoding: line 1, column 30
--------------------------------------------------------------------------------------

클라이언트는 euc-kr세팅으로 SOAP 통신을 하였고

서버 시뮬레이터에서는 UTF-8 세팅이 기본이였다.

모든것을 다 해보진 않았지만 ElementTree에서는 UTF-8이 기본세팅이기에

euc-kr 세팅으로는 파싱이 안되는걸로 추측하고 있다.

solution:
들어오는 스트링을 utf-8로 변환하고 xml header에 encoding을 utf-8로 세팅한다.
1) before
    root = ET.fromstring(rawData)

2) after
    uRawData = unicode(rawData, 'euc-kr').encode('utf-8')

    uRawData = uRawData.replace('euc-kr','utf-8')

    root = ET.fromstring(uRawData)

댓글 없음:

댓글 쓰기