Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
瑞典字符的Python编码_Python_Encoding_Utf 8_Mysql Python - Fatal编程技术网

瑞典字符的Python编码

瑞典字符的Python编码,python,encoding,utf-8,mysql-python,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) 我已将以下行放在刮削过程中涉及的

我正在使用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)
我已将以下行放在刮削过程中涉及的每个文件的顶部,以指示国际字符的使用: #--编码: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) 
回溯(最近一次呼叫最后一次):
文件“C:\Python27\lib\site packages\scrapy-0.14.3-py2.7-win32.egg\scrapy\middleware.py”,
第60行,正在进行中_
链条
返回过程链(self.methods[methodname],obj,*args)
文件“C:\Python27\lib\site packages\scrapy-0.14.3-py2.7-win32.egg\scrapy\utils\defer.py”,
第65行,正在处理中_
链条
d、 回调(输入)
回调中第368行的文件“C:\Python27\lib\site packages\twisted\internet\defer.py”
自启动返回(结果)
文件“C:\Python27\lib\site packages\twisted\internet\defer.py”,第464行,在
_星背蛇
self.\u runCallbacks()
---  ---
文件“C:\Python27\lib\site packages\twisted\internet\defer.py”,第551行,在运行回调中
current.result=回调(current.result,*args,**kw)
文件“C:\Python27\tco\tco\pipelines.py”,第64行,进程中项目
self.db.query(插入查询)
异常。UnicodeEncodeError:“ascii”编解码器无法对156位的字符u'\xe4'进行编码:
序号不在范围内(128)

这个unicode问题一开始看起来令人困惑,但实际上相当简单

# -- coding: utf-8 --
如果您在源代码之上编写此代码,这意味着python将 将代码视为utf-8,而不是传入或传出数据

很明显,您想要将一些数据写入数据库,而这种错误就会发生 当您的一些模块将utf-8字符串(我猜是瑞典语)编码为ascii时

这意味着,要么MySQL被设置为ascii,要么MySQL db驱动程序被设置为ascii

所以我建议你去检查你的mysql设置或驱动程序设置

db = MySQLdb.connect(host=database_host ,user=user ,passwd=pass,db=database_name, charset = "utf8", use_unicode = True)

这将使您的mysql驱动程序使用utf8连接到mysql服务器。包含一个提示:在创建连接时(使用
PooledDB
MySQLdb.connect
),指定选项
charset=“utf8”,使用_unicode=True

帮你自己一个忙,实际阅读以下内容:-这只会节省你的时间。你使用的是什么数据库包装器?请将堆栈跟踪添加到问题中。感谢你的回答…我现在已将完整堆栈跟踪添加到问题中。我已经阅读了docs.python.org/howto/unicode.html上的文档,但仍然无法理解……我正在使用MysqlDB进行连接,它可以与英语网站一起使用。谢谢!很有教育意义!我会马上检查的!db=MySQLdb.connect(host=database\u host,user=user,passwd=pass,db=database\u name,charset=“utf8”,use\u unicode=True)这将帮助您使用utf8连接mysql驱动程序,但您仍然必须使用utf8设置mysql服务器OK,刚刚尝试了这个,但我得到:TypeError:“use\u unicode”是此函数的无效关键字参数。她是我的插入代码:import\u mysql self.db=\u mysql.connect(host=“host”,user=“user\u name”,passwd=“pass”,db=“test\u db”,charset=“utf8”,使用unicode=True)哦。。。你能试着用MySQLdb代替mysql吗?因为_mysql是一种低级函数,MySQLdb是_mysql的包装器。db.set\u字符集('utf8')