Unicode解码错误:无法从位置139解码字节0xe2:序数不在范围内(128)

2024-03-28 21:45:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个代码,它可以根据搜索条件从twitter获取实时tweets,并将其保存到Mysql数据库中。但当我在插入数据库时运行代码时,会引发一个错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 139: ordinal not in range(128)

我不明白问题出在这里是什么代码插入数据库

^{pr2}$

这里的正文是tweet中的文本,状态是它是否被处理。在


Tags: 代码in数据库错误asciimysqlpositiontwitter
2条回答

使用可以使用MySQLdb.escape_字符串用于转义unicode字符。在

>> MySQLdb.escape_string("'")
"\\'"

另外,我认为你必须打开你的mysql.connector'with'use_unicode':真配置:

^{pr2}$

不要将tweet编码为UTF-8,也不要使用字符串格式来创建查询。在

请改用SQL参数:

tweetid = tweet['id_str']
userid = tweet['user']['id_str']
text = tweet['text']
cur.execute(
    """INSERT INTO twitterfeeeds(tweet_id, user_id,body,status) VALUES (%s, %s, %s, '0')""",
    (tweetid, userid, text))

是的,上面的代码和您的代码有区别;tweetiduserid和{}值都作为一个单独的参数(元组)传递给cursor.execute()方法。在

游标负责处理要插入数据库的数据的正确转义。这样可以避免SQL注入攻击(带有;DROP TABLE twitterfeeeds的tweet会立即破坏数据库),并启用查询计划优化。在

这一切都需要您配置数据库连接以支持Unicode数据;在连接上将字符集设置为UTF-8:

^{pr2}$

或者更好的方法是,将数据库配置为使用UTF8MB4字符集(MySQL使用的UTF-8版本无法处理表情符号或U+FFFF之外的其他代码点):

# Note, no characterset specified
con = MySQLdb.connect(host="localhost", user='root', password='', db='')
cursor = con.cursor()
cursor.execute('SET NAMES utf8mb4')
cursor.execute('SET CHARACTER SET utf8mb4')
cursor.execute('SET character_set_connection=utf8mb4')

相关问题 更多 >