5

Pylonsフレームワーク、Makoテンプレートを Web ベースのアプリケーションに使用しています。Python がユニコード文字列を処理する方法については、それほど深くは考えていませんでした。ページがレンダリングされたときにサイトがクラッシュするのを見て緊張した瞬間があり、後でそれがUnicodeDecodeErrorに関連していることを知りました。

エラーが表示された後、「無視」オプションを使用して文字列のエンコード、デコード呼び出しを追加する Python コードの周りでメッシュを開始しましたが、それでもいつかエラーが消えたことを確認できませんでした。

最後に、無視して ascii にデコードし、クラッシュすることなくサイトを実行しました。

私のサイトへの入力は、多くのサイトから来ています。これは、私が言語または選択した言語を制御しないことを意味します。私のサイトは、国際言語と英語をサポートしています。私は一般的に unicode/ascii/utf-8 を気にしないフィード集約を持っています。mako テンプレートを介してテキストを表示している間は、そのまま表示します。

Web の専門家ではありませんが、Python プロジェクト内で文字列を処理するためのベスト プラクティスは何ですか? テキストまたはアプリケーションのすべてのフェーズをレンダリングしている間だけ気にする必要がありますか?

4

2 に答える 2

11

あなたがそれに影響を与えているなら、これは痛みのない方法です:

  • decode(encoding)アプリにヒットするとすぐに、入力エンコーディング(または無視してデコード)とデータを把握します
  • 内部的にはユニコード(u'something'ユニコード)でのみ機能し、データベースでも機能します
  • レンダリング、エクスポートなど、アプリを離れるときはいつでもencode('utf-8')、データ
于 2010-10-14T14:01:58.773 に答える
2

これは実行可能なオプションではないかもしれませんが、ユニコード文字列とバイトオブジェクトの分離が非常に明確になったという理由だけで、Python 3 を使用すると、多数のエンコーディング関連のエラーが消えると言わせてください。Python 2 を使用する必要がある場合は、バージョン 2.6 を選択しますfrom future import unicode_literals。不信者は、投稿したリンクを実際に読む必要があります.

あなたは言う

私は、選択した言語または言語を制御しません。私のサイトは、国際言語と英語をサポートしています。一般的に unicode/ascii/utf-8 を気にしないフィード集約があります

まあ、あなたが何をしようとも、あなたがフィードを消費する一部のデンマークのブロガーが、あいまいなスカンジナビアのエンコーディングスキームで投稿をエンコードすることを選択したという理由だけで、Webアプリケーションがクラッシュすることを望まないことは明らかです. URL にはエンコーディング情報が含まれておらず、悪意のあるユーザーが送信したいバイト シーケンスがわからないため、根本的な問題はすべての Web アプリケーションに関連しています。この場合、私は「安全なチェーン デコード」と呼んでいるものを実行します。最初に utf-8 としてデコードを試み、それが失敗した場合は、cp1252 を使用して再試行します。それが失敗した場合は、リクエスト (HTTP 404) などを破棄します。

フィードを処理しているとおっしゃいましたが、? ¿フィード? ユニコードとエンコーディングについて「気にしない」でください。その声明を明確にしていただけますか?エンコーディングを気にせずに複数の言語でテキストを運ぶサイトをうまく構築する方法を完全に回避します。明らかに ascii-only を使用しても、それほど遠くまで移動することはできません。

于 2010-10-14T15:04:10.480 に答える