2016-05-12 11 views
0

現在、ギリシャ文字で動作しているPython/Djangoプログラムがあります。 は、入力がΜεξικόあるコードutf-8をhtml形式でエンコードする

のこの行で 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

if l.answer == str(request.POST.get('resp_162')).encode('utf-8'): 

:私は次のエラーの問題を取得しています。それは明らかにアクセント付きのoを好まない。

私は、ドキュメントを読んだが、私は実際にそれが

+0

[ASCIIエンコーディングでは文字をエンコードできません。序数は範囲外です(128) "](http://stackoverflow.com/questions/2513027/encoding-gives-ascii-codec-カント - エンコード - 文字 - 順序 - not-range128) – Sayse

+2

なぜそれをテキストとして保持するのではなくバイトテキストに変換しようとしていますか? –

+0

私は '.encode(' utf-8 ')を使って試してみましたが、同じエラーが発生します – HenryM

答えて

0

request.POST.get('resp_162')unicodeオブジェクト(Unicode文字列)を返します得ることはありません - またはNoneが、まあ、それは別の問題です。 strオブジェクト(バイト列)に変換するには、、つまりrequest.POST.get('resp_162').encode("utf-8")を使用してバイトストリングコーデックにエンコードすることによって、str(request.POST.get('resp_162'))-またはに渡すことで2つの方法があります。最初のソリューションは 'ascii'コーデックを使用し、2番目はコーデックを使用します。

あなたはstrにごunicode文字列を渡す最初だと、それはあなたがこの時点でUnicodeEncodeErrorを取得し、非ASCII文字が含まれているため。 IOW:2番目のソリューションを使用するだけでエラーは発生しません。

Djangoは内部的にユニコード文字列(モデル、フォーム、リクエストなどから得られるもの)のみを使用していますが、唯一の賢明なアプローチは、システムの入力時にバイト文字列をデコードすることですシステム出力時にそれらを所望の符号化に符号化する)。私はl.answerがスニペットに含まれているかどうかわかりませんが、 'l'(非常に悪い命名方法FWIW)がモデルインスタンスで、.answerというテキストフィールドの場合は、すでにunicodeという文字列なので、バイト文字列。

関連する問題