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)
댓글 없음:
댓글 쓰기