UnicodeEncodeError:&x27;ascii';编解码器可以';t编码字符'\xa8&x27;位置15:序号不在范围内(128)

UnicodeEncodeError:&x27;ascii';编解码器可以';t编码字符'\xa8&x27;位置15:序号不在范围内(128),unicode,encoding,utf-8,python-3.4,openpyxl,Unicode,Encoding,Utf 8,Python 3.4,Openpyxl,python新手,我想我已经上了unicode课程。 我的堆栈: cx Oracle(5.1.3) 烧瓶(0.10.1) 炼金术(2.0) 烧瓶WTF(0.12) openpyxl(2.2.6) SQLAlchemy(1.0.8) Python 3.4.3 virtualenv。 我正在开发一个小型的we应用程序,它允许用户上传excel工作簿,然后应用程序将这些行写入oracle数据库。我在使用Python2.7.10时开始出现此错误代码。我读到的大部分内容表明,这是由于我默认的pytho

python新手,我想我已经上了unicode课程。 我的堆栈:

  • cx Oracle(5.1.3)
  • 烧瓶(0.10.1)
  • 炼金术(2.0)
  • 烧瓶WTF(0.12)
  • openpyxl(2.2.6)
  • SQLAlchemy(1.0.8)
Python 3.4.3 virtualenv。 我正在开发一个小型的we应用程序,它允许用户上传excel工作簿,然后应用程序将这些行写入oracle数据库。我在使用Python2.7.10时开始出现此错误代码。我读到的大部分内容表明,这是由于我默认的python 2.X解释器编码。因此,我将代码移到了Python3.4.3虚拟环境中。这个错误仍在发生

在下面的代码中,我使用要插入行中的单元格类型压缩列类型。创建字典列表后,调用sqlalchemy进行插入。结果调用ExecuteMy

当遇到excel工作表中的版权、注册商标符号等特殊字符时,会发生此错误。下面的if条件是导致故障的原因。因为这些特殊字符是文本字符串的一部分,所以我希望python 3将is视为字符串,然后插入它

从我所有的阅读资料来看,python 3在默认情况下应该使用utf-8编码。我已经阅读了我使用的所有软件包,它们都使用utf-8编码。所以我不明白为什么它试图使用ascii编码这个字符串&因此出现了这个错误。我曾尝试对该值执行显式.encode('utf-8'),但当excel单元格类型为“无”时,这会导致另一个问题。这意味着它是一个空单元。然后我得到了Nonetype没有编码属性错误

output_data = []
for row in allrows:
   row_dict = {}
        for fobject,cobject in zip(sortedtablecolumnsobject,row):
        ########################################################
        ##Validation & assignment
        ########################################################
            if fobject.type.name == "Text":
                row_dict[fobject.name] = str(cobject.value)
         output_data.append(row_dict)
这是表反射和插入发生的地方:

    m = db.MetaData()
    t = db.Table(tableinfo.table_name,m,autoload = True, autoload_with = db.engine)
    db.engine.execute(t.insert(),output_data)
我认为其中一个软件包未经我同意使用ascii编码:-)请帮助

编辑

>import sys, locale
>sys.stdout.encoding
>'UTF-8'
>locale.getpreferredencoding(False)
>'UTF-8'
跟踪如下:

   Traceback (most recent call last):
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/flask                                                                            /app.py", line 1836, in __call__
        return self.wsgi_app(environ, start_response)
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/flask                                                                            /app.py", line 1820, in wsgi_app
        response = self.make_response(self.handle_exception(e))
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/flask                                                                            /app.py", line 1403, in handle_exception
        reraise(exc_type, exc_value, tb)
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/flask                                                                            /_compat.py", line 33, in reraise
        raise value
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/flask                                                                            /app.py", line 1817, in wsgi_app
        response = self.full_dispatch_request()
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/flask                                                                            /app.py", line 1477, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/flask                                                                            /app.py", line 1381, in handle_user_exception
        reraise(exc_type, exc_value, tb)
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/flask                                                                            /_compat.py", line 33, in reraise
        raise value
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/flask                                                                            /app.py", line 1475, in full_dispatch_request
        rv = self.dispatch_request()
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/flask                                                                            /app.py", line 1461, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)
      File "/home/vagrant/Development/dutmyway/app/views.py", line 220, in upload
        db.engine.execute(t.insert(),output_data)
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/sqlal                                                                            chemy/engine/base.py", line 1991, in execute
        return connection.execute(statement, *multiparams, **params)
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/sqlal                                                                            chemy/engine/base.py", line 914, in execute
        return meth(self, multiparams, params)
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/sqlal                                                                            chemy/sql/elements.py", line 323, in _execute_on_connection
        return connection._execute_clauseelement(self, multiparams, params)
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/sqlal                                                                            chemy/engine/base.py", line 1010, in _execute_clauseelement
        compiled_sql, distilled_params
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/sqlal                                                                            chemy/engine/base.py", line 1146, in _execute_context
        context)
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/sqlal                                                                            chemy/engine/base.py", line 1344, in _handle_dbapi_exception
        util.reraise(*exc_info)
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/sqlal                                                                            chemy/util/compat.py", line 182, in reraise
        raise value
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/sqlal                                                                            chemy/engine/base.py", line 1116, in _execute_context
        context)
      File "/home/vagrant/Development/dutmyway/env/lib/python3.4/site-packages/sqlal                                                                            chemy/dialects/oracle/cx_oracle.py", line 961, in do_executemany
        cursor.executemany(statement, parameters)

提供完整的回溯。什么是
locale.getpreferredencoding(False)
?什么是
sys.stdout.encoding
?Excel倾向于将版权符号作为实体而不是utf-8代码点来逃避,因此您可能需要添加一些代码来处理该问题。@J.F.Sebastian我添加了您要求的内容。正如你所看到的,一切都在utf-8中。因此,我不明白在插入oracle时如何/为什么使用ascii来尝试编码。这不是完全的回溯。请尝试调试器,以本地化错误,然后重试。有多个不同的字符编码可同时用于不同的目的,例如检查db连接编码。另外,您是否确定为用于运行db代码的相同环境提供了结果?