일부 데이터는 장고보기에 업로드됩니다. 클라이언트 :django가 자동으로 유니 코드 POST 항목을 사용하지 못하도록합니다.
from poster.encode import multipart_encode
def upload_data(upload_url, data, filename):
print "Uploading %d bytes to server, file=%s..." % (len(data), filename)
datagen, headers = multipart_encode({filename: data})
request = urllib2.Request(upload_url, datagen, headers)
# Actually do the request, and get the response
try:
resp_f = urllib2.urlopen(request, timeout=120)
except urllib2.URLError:
return None
res = resp_f.read()
resp_f.close()
return res
#...
def foo(self, event_dicts_td):
event_dicts_td_json = json.dumps(event_dicts_td)
res = upload_data(self.upload_url, event_dicts_td_json.encode('utf8').encode('zlib'), "event_dicts_td.json.gz")
보기 :
def my_view(request):
event_dicts_td_json_gz = request.POST.get('event_dicts_td.json.gz')
if not event_dicts_td_json_gz:
return HttpResponse("fail")
print type(event_dicts_td_json_gz), repr(event_dicts_td_json_gz[:10])
event_dicts_td_json_gz = event_dicts_td_json_gz.encode("utf8")
print type(event_dicts_td_json_gz), repr(event_dicts_td_json_gz[:10])
event_dicts_td_json = event_dicts_td_json_gz.decode("zlib").decode("utf8")
return HttpResponse("it still failed")
출력 :
<type 'unicode'> u'x\ufffd\ufffd]s\ufffd\u0192\ufffd\ufffd\n'
<type 'str'> 'x\xef\xbf\xbd\xef\xbf\xbd]s\xef'
이 허용되지. 난 바이트 원시 그냥 필요합니다. 유니 코드를 업로드하지 않고 원시 바이트를 업로드하고 있습니다. 원시 바이트를 다시 원합니다. 어떻게 유니 코드로 디코드하려고하는지 모르겠다. 분명히 사용하지 않았다. utf8
원인 zlib가 데이터를 압축 해제 할 수 없었다. (그것은 zlibbing-it 전에 .encode("utf8")
을하려고하지 않았을 때라도 압축을 풀 수 없습니다. 단지 시험 일뿐입니다.)
어떻게하면 django가 POST 변수를 unicodify하지 않게 할 수 있습니까? 그렇지 않으면 어떻게 취소합니까?
https://docs.djangoproject.com/en/dev/ref/unicode/#useful-utility-functions 당신이 문자열이나 숫자의 목록으로 바이트가 필요하십니까? 허용되지 않는 것은 무엇입니까?, 또는 둘 다? –
sergzach
@sergzach : 어떻게 든 유니 코드 문자열로 바이트 문자열을 디코딩하는 것은 용납 할 수없는 일입니다. 난 원시 바이트가 아닌 문자열을 전달 해요. 원시 바이트를 유니 코드 문자열로 디코딩하지 않고 원래 바이트로 되 돌린다. – Claudiu
선언과 함께 전체보기 기능을 지정할 수 있으며 필요한 가져 오기를 수행 할 수 있습니까? – sergzach