2011-09-09 4 views
0

Djangoを使用してクライアント側にラテン文字(é、è...)を送信しようとしていますが、動作させることができません。 Djangoでは、Pythonファイルに直接ラテン文字を書き込もうとしましたが、エラーがありました。私はユニコードを使っていましたが(Sociétéの場合は 'Soci \ u00E9t \ u00E9'と書いています)、クライアント側に送るときには生のUnicode文字を取得します。Djangoとクライアントのエンコードの問題

誰でも手伝いできますか?

Julien

答えて

1

私は、通常、ソースコードにASCII以外のエンコード文字を入れないでください。

PythonインタプリタがUTF-8ヘッダーを持つソースファイルを尊重しているにもかかわらず、問題はダム(UTF-8非対応のテキストエディタ、シェル、OS、および一部の開発者を意味する)です。あなたの慎重に作られたユニコード文字列を壊します。

すべてのソースファイルでASCII文字のみの文字セットを使用しています。これはどこでも普遍的にサポートされているため、ソースコードが破損してしまうことはありません。

ほとんどの場合、ユニコードのエスケープ文字列があります。

Pythonでは、単にあなたの前にuを置く必要があります。

すなわち u'Soci \ u00E9t \ u00E9'

そうでない場合、Pythonはリテラル文字としてではなく、自分の意図したUnicodeエスケープ文字以上の文字の大半を扱っていました。

(その前にAUのない文字列である)あなたのUnicodeエンコードされた文字列またはバイナリ文字列の正しさをテストするための簡単な方法は、Pythonインタプリタを起動し、それを印刷することです:

>>> print 'Soci\u00E9t\u00E9' 
Soci\u00E9t\u00E9   #ewwwwwww 
>>> print u'Soci\u00E9t\u00E9' 
Société      #yay!!! 

注意:上のテストでは、あなたのシェルがUTF-8をよりよくサポートしています(おそらくMacにローカルにログインしている場合)...そうしないと、印刷出力が不安定になります。それはうまくいきますが、それは正しい言葉でもありません(つまり、あなたの入力文字列は理想的な意味でフォーマットされています)。

ビュー機能とレンダリングの間でユニコードを適切に処理していないミドルウェアやその他の方法がない限り、DjangoはUnicode文字列を正しく出力する必要があります。

ところで、すべての文字列の先頭にuを付けることをお勧めします。 これはテストです 'これはテストです'とまったく同じです。

違いは、ユニコード指定文字列(u'this '+' a '+' test 'など)を含む文字列操作操作は、Pythonにユニコード対応であることを伝えます。

はい、Pythonの意味では、デフォルトではUnicode Dumbです。ちょうどいくつかのテキストエディタのように! :)

'u'、魔法のソース

0

Pythonファイルのファイルエンコードを確認してください。それらがUTF-8であることを確認してください。また、クライアント側もUTF-8であることを確認してください。