Django remplace les caractères non-ascii avec \ufffd
Dans mon projet, quand je suis en soumettant des données avec des caractères non-ascii pour la forme, je reçois toutes les données non-ascii remplacé par unicode caractère de remplacement \ufffd. Dans la vue qui reçoit les données du formulaire, j'ai ce mal formé des chaînes à la demande.POST. Semble que j'ai manqué quelque chose d'évident.
Mon environnement:
- Python 2.6
- Django 1.3 alpha 1
- MySQL 5.1, base de données utilise l'UTF-8 charset
Ont reproduit ce problème à l'aide de serveur de développement en local et intermédiaire du serveur Apache+mod_wsgi, avec Firefox 4 et Chrome 11.
Où dois-je chercher à la séance d'entraînement le problème? Merci.
Mise à jour: ci-dessous est le code je suis aide -
@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}
Avoir mis à jour ma question avec le code, merci.
OriginalL'auteur Serge Tarkovski | 2011-04-21
Vous devez vous connecter pour publier un commentaire.
Utiliser la magie! smart_unicode de Django devrait vous aider beaucoup. Mix entre smart_unicode et smart_str concernant si vous souhaitez encoder ou de décoder une chaîne de caractères (pour n'importe quel projet plus tard ;)).
OriginalL'auteur Cyril N.
Résolu: j'ai oublié d'ajouter de l'encodage des pages HTML, je suis de la génération. L'ajout de
<meta http-equiv="content-type" content="text/html; charset=utf-8">
résolu le problème.OriginalL'auteur Serge Tarkovski