这篇文章是同样与我的问题 MySQL在蟒蛇:UnicodeEncodeError:'ascii' 这只是清楚的东西。

我试图保存一串一个数据库,但我得到一个错误:

文件"。smart.py"51行, (编号,案文,"智能",'u')

UnicodeDecodeError:'ascii'编不能解字节0xc2在的位置 25:顺序不是在范围(128)

和串保存在 m['Text']

拉拉*=#&%@<>_?!:;-'"/()¥¡¿

这是一段代码

risk = m['Text']
msg = risk.encode('utf8')
text = db.escape_string(msg)

sql = "INSERT INTO posts(nmbr, \
       msg, tel, sts) \
       VALUES ('%s', '%s', '%s', '%s')" % \
       (number, text, 'smart', 'u')

如果我尝试评论了SQL查询和投入 打印文本 它将打印出拉拉*=#&%@<>_?!:;-'"/()¥¡¿

错误仅仅是时遇到的SQL正在处理中。

MySQL编码设为utf8_unicode_ci.(或者我应该改变这种状况?)

谢谢。

有帮助吗?

解决方案

添加这些参数 MySQLdb.connect(..., use_unicode=1,charset="utf8").

创建一个光标

cur = db.cursor()

然后执行,像这样:

risk = m['Text']
sql = """INSERT INTO posts(nmbr, msg, tel, sts) \
         VALUES (%s, %s, %s, %s)"""
values = (number, risk, 'smart', 'u')
cur.execute(sql,values)  #use comma to separate sql and values, this will ensure values are escaped/sanitized
cur.commit()

现在你不需要这些两条线:

msg = risk.encode('utf8')
text = db.escape_string(msg)

其他提示

它是不清楚是否是你的 m['Text'] 值的类型 StringTypeUnicodeType.我的打赌是那是一个字节-string(StringType).如果这是真的,然后添加一条线 m['Text'] = m['Text'].decode('UTF-8') 之前插入可能的工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top