use*_*453 2 python encoding utf-8 mysql-python
我正在使用scrapy从网站中提取数据.我正在使用MysqlDB将数据保存到mysql数据库.该脚本适用于英语网站,但当我在瑞典网站上尝试时,我得到:
self.db.query(insertion_query)
exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 156:
ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
我已将以下行放在抓取过程中涉及的每个文件的顶部,以指示使用国际字符:# - - coding:utf-8 - -
但我仍然得到一个错误.我还需要python接受非英语字符串吗?这是完整的堆栈跟踪:
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\scrapy-0.14.3-py2.7-win32.egg\scrapy\middleware.py",
line 60, in _process_
chain
return process_chain(self.methods[methodname], obj, *args)
File "C:\Python27\lib\site-packages\scrapy-0.14.3-py2.7-win32.egg\scrapy\utils\defer.py",
line 65, in process_
chain
d.callback(input)
File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 368, in callback
self._startRunCallbacks(result)
File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 464, in
_startRunCallbacks
self._runCallbacks()
--- <exception caught here> ---
File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 551, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "C:\Python27\tco\tco\pipelines.py", line 64, in process_item
self.db.query(insertion_query)
exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 156:
ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
这个unicode问题起初看起来很混乱,但实际上很容易.
# -- coding: utf-8 --
Run Code Online (Sandbox Code Playgroud)
如果你在源代码之上写这个,那就意味着,python会将你的代码视为utf-8,而不是传入或传出的数据.
您显然想要将一些数据写入您的数据库,并且当您的某些模块将您的utf-8字符串(我猜是瑞典语)编码为ascii时会发生此错误.
这意味着,要么将MySQL设置为ascii,要么将mysql数据库驱动程序设置为ascii.
所以我建议去检查你的mysql设置或驱动程序设置.
db = MySQLdb.connect(host=database_host ,user=user ,passwd=pass,db=database_name, charset = "utf8", use_unicode = True)
Run Code Online (Sandbox Code Playgroud)
这将使您的mysql驱动程序使用utf8连接到mysql服务器
| 归档时间: |
|
| 查看次数: |
1682 次 |
| 最近记录: |