通过multipart / form-data发布外来字符

时间:2012-01-23 20:56:05

标签: django google-app-engine multipartform-data django-nonrel

我在google-app-engine上使用django-nonrel。

当我发布外国字符时,

在我的案例中,韩文字符,其中包含多部分/表格数据。

<form method="post" enctype="multipart/form-data" action=".">

例如,如果我发布一个字符串'한글'

它在我的数据库中记录为字符串'7ZWc6riA'。

根据我的研究,这是jsp的常见案例,

并在Java中解决如下问题:

String name = multipartRequest.getParameter("name");
name = new String(name.getBytes("8859_1"),"utf-8");

但是,我无法在Django中找到相应的内容,

也不太确定我是否可以用相同的逻辑解决我的问题。

任何帮助/线索将不胜感激。

2 个答案:

答案 0 :(得分:1)

我发现了这个问题的未解决问题。

问题2749:Blobstore处理程序打破数据编码 http://code.google.com/p/googleappengine/issues/detail?id=2749

您可以在上面的链接中找到几个不同的选项来解决此错误。

就个人而言,作为Django-nonrel用户,我会使用下面显示的解决方案:

import logging
import quopri
log = logging.getLogger(__name__)

    class BlobRedirectFixMiddleware(object):
        def process_request(self, request):
            if request.method == 'POST' and 'HTTP_X_APPENGINE_BLOBUPLOAD' in request.META and request.META['HTTP_X_APPENGINE_BLOBUPLOAD'] == 'true':
                request.POST = request.POST.copy()
                log.info('POST before decoding: %s' % request.POST)
                for key in request.POST:
                    if key.startswith('_') or key == u'csrfmiddlewaretoken':
                        continue
                    value = request.POST[key]
                    if isinstance(value,(str, unicode)):
                        request.POST[key] = unicode(quopri.decodestring(value), 'iso_8859-2')
                log.info('POST after decoding: %s' % request.POST) 
            return None

答案 1 :(得分:0)

问题很可能在于您所服务的HTML而不是Django。我正在使用HTML5,我只需要在我的元素中使用这个元标记。我尝试了各种语言,并且输入都很好。

<head>
<meta charset="UTF-8" />
</head>