2009-05-05 12 views
6

私はDjangoのようないくつかのフレームワークを見ているので、良いアイデアかもしれないようです。私のPython Webアプリケーションはすべての文字列に対してUnicodeを使用すべきですか?

一方、これらの余分なものをどこにでも持ち込むことは大きな苦痛のようです。

私はこれをしないと何が問題になるでしょうか?

これを行うと問題が発生しますか?

私は今フレームワークとしてパイロンを使用しています。

答えて

10

Python 3では、すべての文字列がUnicodeです。だから、u''の文字列を使う必要がありますが、2to3ツールを使用して最終的にPython 3にアップグレードすると、uがすべて消えてしまいます。 Unicode文字列でコードをテストしているので、より良い立場になります。

詳細については、Text Vs. Data Instead Of Unicode Vs. 8-bitを参照してください。

19

あなたが実行してのpython 2.6でu''を避けることができます。

from __future__ import unicode_literals 
それは、Python 3であると同じように、ユニコードオブジェクトであることを 'string literals'を行います

+0

驚くばかりです。超便利なチップ。 – baudtack

+0

+1選択した回答と組み合わせることはできません。両方とも、この問題に対処するための「最良の」答えです。 –

3

私はこれをしないと何が問題になるでしょうか?

私は西洋人で日本に住んでいるので、非ASCII文字を扱うためには何が必要かを直接見てきました。 Unicode文字列を使用しない場合の問題は、コードがA-Z以外のものを使用する世界の部分に対する不満になることです。私たちの会社は、ある種のウェブソフトウェアを手放すことなく、日本語のキャラクターをやるように苛立ってしまった。

英語の話し手がUnicodeの素晴らしさを理解するのに少し時間がかかりますが、すべての文化や言語でコンピュータにアクセスできるようにするのは本当に素晴らしい作業です。

「落とし穴」:

  1. あなたの出力のWebページ(例えば、コンテンツエンコードヘッダを使用して)適切に使用中のエンコーディングを述べることを確認し、その後、出力で適切にすべてのUnicode文字列をエンコードします。 Python 3のUnicode文字列は、これを行うには大きな改善点です。

  2. すべてをUnicode文字列で行い、最後の特定のエンコーディングに変換して出力します。 PHPのような他の言語は、例えばUnicodeを操作するときにバグを起こしやすい。 UTF-8フォーム。 Unicode文字列を切り捨てなければならないとします。内部的にUTF-8形式になっていると、マルチバイト文字を途中まで切り落とす可能性があり、その結果ゴミが出る危険性があります。 Pythonの内部でUnicode文字列を使用すると、これらの間違いを作るのが難しくなります。

+1

どんな種類のテキスト操作(大文字の変更、単語の文字の切り詰めなど)を行う場合は、Pythonのユニコードオブジェクトを使用するか、苦痛を感じます。 –

1

Unicodeを内部的に使用することは、非ASCII文字の問題を回避するのに適しています。アプリケーションの境界(着信データをユニコードに、発信データをUTF-8などに)で変換します。多くの場合、パイロンはあなたのために変換を行うことができます。コントローラは安全にUnicode文字列を返すことができます。 SQLAlchemyモデルは、Unicode列を宣言することがあります。

ソースコードの文字列リテラルについて:通常、u接頭辞は必要ありません。 ASCIIを含むstrオブジェクトをUnicodeオブジェクトと安全に混在させることができます。すべての文字列リテラルが純粋なASCIIか、または "ユニコード"であることを確認してください。

関連する問題