/ / Djangoは非ASCII文字をufffdに置き換えます-django、unicode

Djangoは非ASCII文字をufffdに置き換えます - django、unicode

プロジェクト内で、データを送信するときフォームに非ASCII文字を使用すると、すべての非ASCIIデータがUnicode置換文字ufffdに置き換えられます。フォームからデータを受け取るビューでは、request.POSTにこの不正な形式の文字列があります。明らかな何かを見逃したようです。

私の環境:

  • Python 2.6
  • Django 1.3 alpha 1
  • MySQL 5.1、データベースはutf-8文字セットを使用します

Firefox4とChrome11で、ローカルの開発サーバーとApache + mod_wsgiを実行している中間サーバーを使用してこの問題を再現しました。

問題を解決するためにどこを見ればよいですか?ありがとう。

更新: 以下は私が使用しているコードです-

@render_to("mail/new_message.html")
@login_required
def new_message(request, user_id):
user = request.user

if request.method == "POST":
form = MessageForm(request.POST, request.FILES)
# exclude attachment from init instance, because we need instance id
# for saving attachment
form._meta.exclude = ["attachment"]
if form.is_valid():
new_msg = form.save()
new_msg.sender = user
if form.cleaned_data["attachment"]:
new_msg.attachment = form.cleaned_data["attachment"]
new_msg.save()
message_sent.send(sender=None,instance=new_msg)
return HttpResponseRedirect(reverse(messages))
else:
initial = {}
if user_id:
initial["receivers"] = [user_id,]
form = MessageForm(initial=initial)
return {"form": form}

回答:

回答№1は0

魔法を使って! Djangoのsmart_unicode あなたに大いに役立つはずです。文字列をエンコードするかデコードするかについては、smart_unicodeとsmart_strを組み合わせてください(後のプロジェクトの場合;))。


回答№2の場合は0

解決済み: 生成しているHTMLページにエンコーディングを追加するのを忘れました。の追加 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 問題を解決しました。