1

私はgoogle-app-engineでdjango-nonrelを使用しています。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"); 

をしかし、私はジャンゴで同等のものを見つけることができませんでした、

私は同じ論理で私の問題を解決することができるかどうかはあまり確かではありません。

どのような助けや手がかりをいただければ幸いですか?

+0

あなたのページには、ヘッダーとUTF-8コンテンツ・タイプを設定metaタグを持っていますか?ところで、あなたのコードに相当するのは、 'name.decode( 'utf-8')' nameがバイトストリングの場合です。 – Ski

+1

どのように "壊す"?関連するコードとスタックトレースを表示してください! –

答えて

1

この問題は未解決の問題です。

問題2749:あなたは上記のリンクでこのバグを回避行くには、いくつかの異なるオプションを見つけることができブロブストアハンドラ速報データ符号化 http://code.google.com/p/googleappengine/issues/detail?id=2749

個人的には、ジャンゴ・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

問題は、Djangoではなく、あなたが提供しているHTMLの可能性が高いです。私はHTML5を使用しています。私の要素にはこのメタタグが必要です。私は様々な言語を試してみました。

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

HTMLにメタタグがありませんでしたが、それを追加しても問題は解決しませんでした。 Windows 2003サーバーでmySQLを使用していて、Mac OSX LionでDjangoの開発サーバーを使用していたときにこの問題は発生しませんでした。 – taelimoh

関連する問題