MySQL SELECT文の一部として使用する前に、UTF-8でエンコードされた文字列をサニタイズします。UTF-8でエンコードされた文字列のサニタイズ
例えば、私が持っている:
query = MySQLdb.escape_string(query)
が、このラインは
「ASCII」コーデックが位置0-2で文字をエンコードすることはできません読み込む発生した例外につながっている:序を の範囲ではありません(128)。
これはどのように処理できますか?
MySQL SELECT文の一部として使用する前に、UTF-8でエンコードされた文字列をサニタイズします。UTF-8でエンコードされた文字列のサニタイズ
例えば、私が持っている:
query = MySQLdb.escape_string(query)
が、このラインは
「ASCII」コーデックが位置0-2で文字をエンコードすることはできません読み込む発生した例外につながっている:序を の範囲ではありません(128)。
これはどのように処理できますか?
MySQLdbがユニコードクエリを文字列にエンコードしようとしているようです。これを行うには、デフォルトのエンコーディング、ASCIIを使用しています。
あなたの入力をASCIIにエンコードすることはできません。だから、あなたは単にどのようなエンコーディングを使うべきかをpythonに伝える必要があります:utf-8。
あなたは明らかに何かがあなたの文字列を想定している
正確に私の問題。私は、MySQLを幸せにし、他の人たちを幸せに保つために、UTF-8エンコーディングに出入りする必要があります。 – SK9
これは残念なことに、Pythonが独自に扱うことのできない非ASCIIのUnicode文字列を使用するたびに、多くのモジュールで常時発生します。あなたのMySQLdbの問題については、SQLAlchemyのようなORM層を調べたいかもしれません。 –
query = "こうえん"
query = MySQLdb.escape_string(unicode(query,'utf-8'))
のようなものを使ってそれをエンコードしようとします。これは "例外値:Unicodeのデコードはサポートされていません"を示しています。私はPython 2.6.6を使用しています。私は "ええん"を助けてくれないので質問から削除しました。 – SK9
MySQLのグローバル文字セットを設定する必要はありますか? – SK9
どの機能がエラーを出していますか? 'query = unicode(query、 'utf-8')'という2つの関数を分離し、 'query'をエスケープ関数に渡してみてください。どのラインがエラーになっていますか? – FakeRainBrigand
あなたの例では、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」になります。
*注:*私はそのモジュールをインストールしているとは思わないが、これは一般的な問題に対する一般的な解決策である。私はそれが動作することを願っていますが、@ Adaのコードはおそらく(または2つの組み合わせ)ではない場合。 – FakeRainBrigand
私はPython 2.6.6を使用しています。私は "ええん"を助けてくれないので質問から削除しました。 – SK9
MySQLのグローバル文字セットを設定する必要はありますか? – SK9
query = query.encode('utf-8').
を使用することによって、これを達成することができますがUS-ASCIIではなくUTF-8です。私は明示的に 'query.encode(" utf-8 ")' –