Прерывание посторонних символов при публикации через multipart / form-data - PullRequest
1 голос
/ 24 января 2012

Я использую django-nonrel в google-app-engine.

Когда я публикую посторонний символ,

в моем случае это Korean Character, с multipart / form-data он ломается.

<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 ]

1 голос
/ 03 февраля 2012

Я обнаружил открытую проблему для этой проблемы.

Проблема 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
0 голосов
/ 25 января 2012

Проблема, скорее всего, связана с HTML, который вы обслуживаете, а не с Django. Я использую HTML5, мне просто нужен этот метатег в моем элементе. Я пробовал разные языки, и все они ввели нормально.

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