1

Cgiスクリプトを使用してSqlite3に漢字を挿入しても機能しません。クエリブラウザツールを使用して同じデータベースから漢字を挿入して選択できますが、これにPythonスクリプトを使用すると、エラーが表示されます。これは私がデータベースを作成するために使用したクエリです

CREATE TABLE registrations ( m_username VARCHAR PRIMARY KEY COLLATE 'BINARY', m_identity VARCHAR, m_updatetime DATETIME );

そしてこれは私がデータベースから値を更新して選択するために使用したcgiスクリプトです

#! /Python26/python
dbFile = 'D:/sqlite/registrations'
import cgi
import sqlite3
import xml.sax.saxutils

 query = cgi.parse()
db = sqlite3.connect(dbFile)

user = query.get('username', [None])[0]
identity = query.get('identity', [None])[0]
friends = query.get('friends', [])
print 'Content-type: text/plain\n\n<?xml version="1.0" encoding="utf-8"?>\n'

print "<result>"

if user:
try:
    c = db.cursor()
    c.execute("insert or replace into registrations values (?, ?,      datetime('now'))", (user, identity))
    print "\t<update>true</update>"
except:
    print '\t<update>false</update>'

for f in friends:
print "\t<friend>\n\t\t<user>%s</user>" % (xml.sax.saxutils.escape(f), )
c = db.cursor()
c.execute("select m_username, m_identity from registrations where m_username = ? and m_updatetime > datetime('now', '-1 hour')", (f, ))
for result in c.fetchall():
    eachIdent = result[1]
    if not eachIdent:
        eachIdent = ""
    print "\t\t<identity>%s</identity>" % (xml.sax.saxutils.escape(eachIdent), )
    if f != result[0]:
        print "\t\t<registered>%s</registered>" % (xml.sax.saxutils.escape(result[0]), )
print "\t</friend>"
db.commit()

print "</result>"

CHARSETをUTF-8に設定する必要があると思いますが、その方法がわかりません。私はグーグルで検索されましたが、この問題を解決するための良い方法を見つけることができませんでした。親切に誰かが私を助けてくれます。

4

1 に答える 1

0

私はこれをクライアント側で行いました。EncodeBase64を使用し、中国語のデータをエンコードしてデータベースに送信しました。これはまっすぐな方法ではないと思います。しかし、私は他の方法を見つけることができませんでした。

于 2012-10-08T09:32:09.837 に答える