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 字符出现在 Comments 字段中

任何帮助,将不胜感激...

4

3 回答 3

5

一个非常快速的解决方法应该是确保您的字符串以 Unicode 开头:

sql = u"INSERT..."

即在字符串前面加上u.

但是,您应该使用字符串格式将值插入到 SQL 语句中。您应该依靠 MySQL 适配器为您执行此操作,以确保您免受 SQL 注入:

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 回答