2011-12-24 12 views
1

MySQL SELECT文の一部として使用する前に、UTF-8でエンコードされた文字列をサニタイズします。UTF-8でエンコードされた文字列のサニタイズ

例えば、私が持っている:

query = MySQLdb.escape_string(query) 

が、このラインは

「ASCII」コーデックが位置0-2で文字をエンコードすることはできません読み込む発生した例外につながっている:序を の範囲ではありません(128)。

これはどのように処理できますか?

+1

query = query.encode('utf-8').を使用することによって、これを達成することができますがUS-ASCIIではなくUTF-8です。私は明示的に 'query.encode(" utf-8 ")' –

答えて

3

MySQLdbがユニコードクエリを文字列にエンコードしようとしているようです。これを行うには、デフォルトのエンコーディング、ASCIIを使用しています。

あなたの入力をASCIIにエンコードすることはできません。だから、あなたは単にどのようなエンコーディングを使うべきかをpythonに伝える必要があります:utf-8。

あなたは明らかに何かがあなたの文字列を想定している

+0

正確に私の問題。私は、MySQLを幸せにし、他の人たちを幸せに保つために、UTF-8エンコーディングに出入りする必要があります。 – SK9

+0

これは残念なことに、Pythonが独自に扱うことのできない非ASCIIのUnicode文字列を使用するたびに、多くのモジュールで常時発生します。あなたのMySQLdbの問題については、SQLAlchemyのようなORM層を調べたいかもしれません。 –

0
query = "こうえん" 
query = MySQLdb.escape_string(unicode(query,'utf-8')) 
+1

のようなものを使ってそれをエンコードしようとします。これは "例外値:Unicodeのデコードはサポートされていません"を示しています。私はPython 2.6.6を使用しています。私は "ええん"を助けてくれないので質問から削除しました。 – SK9

+0

MySQLのグローバル文字セットを設定する必要はありますか? – SK9

+0

どの機能がエラーを出していますか? 'query = unicode(query、 'utf-8')'という2つの関数を分離し、 'query'をエスケープ関数に渡してみてください。どのラインがエラーになっていますか? – FakeRainBrigand

3

あなたの例では、queryは 'str'タイプです。文字列の前に 'u'を置くと、 'unicode'型になります。

>>> query = "こうえん" 
>>> print type(query) 
<type 'str'> 
>>> query = u"こうえん" 
>>> print type(query) 
<type 'unicode'> 

これは、Pythonバージョン2.xと3.xの主な違いの1つです。 3.0以降、デフォルトではすべての文字列が「Unicode」になります。

+0

*注:*私はそのモジュールをインストールしているとは思わないが、これは一般的な問題に対する一般的な解決策である。私はそれが動作することを願っていますが、@ Adaのコードはおそらく(または2つの組み合わせ)ではない場合。 – FakeRainBrigand

+0

私はPython 2.6.6を使用しています。私は "ええん"を助けてくれないので質問から削除しました。 – SK9

+0

MySQLのグローバル文字セットを設定する必要はありますか? – SK9

関連する問題