自分のWebサイトをアクセント付きの文字(フランス語のWebサイト)と互換性を持たせるのに問題があります。
一部のフィールド値にアクセント付きの文字を含めることができるフォームがあります。たとえば、「Coupé」です。
私のURLは次のようになります:
http://localhost:8080/recherches/s?marque=Audi&modeles=A5+Coup%C3%A9
私のdjangoビューでは、次のようなことをします。
def search(request):
logger = logging.getLogger('custom')
criteria_form = CriteriaForm(request.GET or None)
logger.debug("search")
logger.debug(request.GET)
そして、ログに記録されるのは次のとおりです。
<QueryDict: {u'marque': [u'Audi'], u'modeles': [u'A5 Coup\xc3\xa9']}>
この変数「modeles」を使用してデータベースにクエリを実行すると、エラーが発生します。
>>> mo = u'A5 Coup\xc3\xa9'
>>> Vehicule.objects.filter(valid=True, modele=mo)[0].marque.name
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 211, in __getitem__
return list(qs)[0]
IndexError: list index out of range
utf-8バージョンでデータベースをクエリすると、問題は解決します。
>>> mo = 'A5 Coup\xc3\xa9'
>>> Vehicule.objects.filter(valid=True, modele=mo)[0].marque.name
u'Audi'
したがって、私の問題は、変数がutf8であり、Unicodeでエンコードされているという事実に起因していると思います(ただし、間違っている可能性があります)。
どうしてこれがそのようにエンコードされるのですか?
最初の応答後の更新:
フォームを送信するページのヘッダーには、次のものがあります。
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
ただし、views.pyにエンコードを印刷すると、次のようになります。
logger.debug(request.encoding)
次に、Noneを取得します。
しかし、このエンコーディングを設定する方法がわかりません。上記のようにヘッダーからだと思いました...
また、HTTP_ACCEPT_CHARSETにそれがあります。
HTTP_ACCEPT_CHARSET ISO-8859-1,utf-8;q=0.7,*;q=0.3
それはここから来ることができますか?はいの場合、どのように変更すればよいですか?