0

Pythonスクリプトを使用してsqlite3データベースにデータを追加するユーザー入力用のテキストフィールドがあります。しかし、ユーザーが utf-8 文字を含むテキストを入力すると、スクリプトが壊れます。

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 24: ordinal not in range(128)

データベースの文字列エントリはすべてユニコードであるため、INSERT ステートメントが問題を引き起こす可能性があると思われますが、テキスト入力から utf-8 文字を %s 文字列に変換せずに sqlite3 データベースに渡すにはどうすればよいでしょうか? これは、テキストエリアからメッセージを追加する方法です:

c.execute("INSERT INTO messages VALUES ('%s', '%s', NULL)" % (threadinput , strip_html(newmessage)))

これは、db からのメッセージを出力し、UnicodeError を発生させる場所です。

conn = sqlite3.connect('msg.db')
c = conn.cursor()
c.execute("SELECT * FROM messages WHERE thread ='%s' ORDER BY nr ASC" % threadinput)
rows = c.fetchall()
count = 1
for row in rows:
        print "<li>Message Nr. %s: %s</li>" % (count, row)
        count += 1
conn.close()
4

1 に答える 1