UnicodeEncodeError:&x27;ascii';编解码器可以';t编码字符'\xa8&x27;位置15:序号不在范围内(128)
python新手,我想我已经上了unicode课程。 我的堆栈: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
- cx Oracle(5.1.3)
- 烧瓶(0.10.1)
- 炼金术(2.0)
- 烧瓶WTF(0.12)
- openpyxl(2.2.6)
- SQLAlchemy(1.0.8)
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代码的相同环境提供了结果?