2010-04-13 4 views
3

XML 형식의 유니 코드 문자열을 입력으로 사용하고 있습니다. xml.sax는 원래 웹 양식에서 입력 한 것입니다. 내 로컬 컴퓨터 (Python 2.5, 기본 xmlreader expat를 사용하여, 응용 프로그램 엔진을 통해 실행)에서 제대로 작동합니다. 그러나 프로덕션 앱 엔진 서버의 코드와 입력 문자열은 정확히 일치하지 않습니다.App Engine에서 Python SAX로 유니 코드 XML 구문 분석

from xml import sax 
class MyHandler(sax.ContentHandler): 
    pass 

handler = MyHandler() 
# Both of these unicode strings return 'not well-formed' 
# on app engine, but work locally 
xml.parseString(u"<a>b</a>",handler) 
xml.parseString(u"<!DOCTYPE a[<!ELEMENT a (#PCDATA)> ]><a>b</a>",handler) 

# Both of these work, but output unicode 
xml.parseString("<a>b</a>",handler) 
xml.parseString("<!DOCTYPE a[<!ELEMENT a (#PCDATA)> ]><a>b</a>",handler) 

오류 발생 : 예를 들어, 아래 코드로 발생

File "<string>", line 1, in <module> 
    File "/base/python_dist/lib/python2.5/xml/sax/__init__.py", line 49, in parseString 
    parser.parse(inpsrc) 
    File "/base/python_dist/lib/python2.5/xml/sax/expatreader.py", line 107, in parse 
    xmlreader.IncrementalParser.parse(self, source) 
    File "/base/python_dist/lib/python2.5/xml/sax/xmlreader.py", line 123, in parse 
    self.feed(buffer) 
    File "/base/python_dist/lib/python2.5/xml/sax/expatreader.py", line 211, in feed 
    self._err_handler.fatalError(exc) 
    File "/base/python_dist/lib/python2.5/xml/sax/handler.py", line 38, in fatalError 
    raise exception 
SAXParseException: <unknown>:1:1: not well-formed (invalid token) 

유니 코드를 입력 할 때 또한 python2.5와 해외 거주자를 사용하는 응용 프로그램 엔진의 파서는, 실패 어떤 이유 ?

답변

3

유니 코드 문자열을 구문 분석하지 않아도되며, UTF-8 인코딩 된 문자열을 구문 분석해야합니다. 유니 코드 문자열은 XML 1.0 사양에 따라 기본적으로 올바른 형식의 XML이 아닙니다. 따라서 유니 코드를 파서에 공급하기 전에 유니 코드를 UTF-8 인코딩으로 변환해야합니다.

+1

맞습니다. original_string.encode ('utf-8')를 전달하면 문제가 해결됩니다. 표준 파서가 직선형 유니 코드를 전달할 수 있다는 것은 이상합니다. –