Python 2.7에서 Pivotal Tracker API 모듈을 구현했습니다. Pivotal Tracker API은 POST 데이터가 XML 문서이고 "application/xml"이 컨텐트 유형이라고 예상합니다. 같이콘텐츠 유형이 "application/xml"인 경우 httplib를 사용하여 비 ASCII 문자를 게시하는 방법
내 코드는 문서를 게시 할 urlib/HTTPLIB 사용으로 근처에 내가 할 수있는
File "/usr/lib/python2.7/httplib.py", line 951, in endheaders
self._send_output(message_body)
File "/usr/lib/python2.7/httplib.py", line 809, in _send_output
msg += message_body
exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 89: ordinal not in range(128)
을 : XML 텍스트에 비 ASCII 문자가 포함 된 경우
request = urllib2.Request(self.url, xml_request.toxml('utf-8') if xml_request else None, self.headers)
obj = parse_xml(self.opener.open(request))
이 예외를 산출 httplib._send_output은 메시지 페이로드에 대한 ASCII 문자열을 생성합니다. 이는 아마도 데이터가 URL 인코딩 된 것으로 예상하기 때문입니다 (application/x-www-form-urlencoded). ASCII 문자 만 사용되는 한 application/xml에서 잘 작동합니다.
비 ASCII 문자가 포함 된 애플리케이션/xml 데이터를 게시하거나 (예 : Twistd 및 POST 페이로드에 맞춤 제작자를 사용하여) 농구를 뛰어 넘어야할까요?
아마도 '내용 유형'을 변경할 수는 있지만 문제가 어떻게 해결 될까요? 'msg'는 파이썬 라이브러리에서 생성되고 바이트 문자열입니다. – jro
@jro : HTTP와는 아무런 관련이 없습니다. 위의 * 완전한 * 예제를보십시오. – jfs
이것이 문제의 원인이되었지만,'msg' 변수를 제어 할 수 없다는 것이 었습니다. 나는 당신의 요점에 동의하지만, 내 질문은 libs'msg'가'msg = "\ r \ n".join (self._buffer)로 생성 될 때 어떻게이 사실이 그를 해결할 수 있도록 도와 줄 수 있는지에 관한 것입니다. '? – jro