0

サーバー上で python を使用して mySQL と通信します。非ASCII文字を含む文字列がpythonに渡されてmySQLテーブルフィールドに伝達されると、サーバーからこのエラーが発生します。

UnicodeEncodeError: 'ascii' codec can't encode characters in position 251-256: ordinal not in range(128)

utf-8 データを渡すにはどうすればよいですか。私はコメントを持っています:

"# -*- coding: utf-8 -*-"

...Python のメイン コード ページとすべてのコード ページに含まれています。

奇妙なことに、UTF-8 文字を含む mySQL からデータを取得でき、JavaScript にうまく転送されます。

データの転送を試みるコード行は次のとおりです。

sql = '''INSERT INTO clientMail (clientID,coID,MessageDate,TypeSent,Comments,FName)
        VALUES(%s, %s, '%s', '%s', '%s', '%s') ''' % (clientID,companyID,currentDate,TypeSent,emailMessage,company_Name)
print "===>>>>>>>>>>>>>",sql

[コメント] フィールドに UTF-8 文字が含まれている

どんな助けでも大歓迎です...

4

3 に答える 3

5

非常に簡単な修正は、文字列が最初から Unicode であることを確認することです。

sql = u"INSERT..."

つまり、文字列の前にu.

ただし、文字列の書式設定を使用して値を SQL ステートメントに補間するべきではありません。SQL インジェクションから確実に保護するために、MySQL アダプターに頼ってそれを行う必要があります。

sql = u"INSERT... VALUES (%s, %s..)"
cursor.execute(sql, (clientID, companyID...,))
于 2012-06-06T16:56:05.013 に答える
1

ここの誰かが助けてくれたと言いたいのですが、どんなに頑張ってもうまくいきませんでした. とにかく私はすべてから何かを学びました。

この明らかに困難な問題を解決する方法は次
のとおりです。接続パラメータには次の項目が含まれている必要があります。

... charset="utf8", use_unicode=True"

私が結論付けたように、これらがなければ何をしてもうまくいきません。しかし、私は初心者なので、あまり真剣に考えないでください。

それにもかかわらず、ピッチに参加してくれてありがとう....あなたたちはロックです。

デニス

于 2012-06-06T17:47:25.883 に答える
-1

データはUnicodeである必要があり、文字列フォーマット(%s)は、デフォルトのエンコーディング(ASCII)を使用してデータを文字列型に強制します。

Unicode文字列で.encode('utf-8')を使用すると、すべて設定されます。

于 2012-06-06T16:48:32.907 に答える