Python 特殊字符和编码

Python 特殊字符和编码,python,mysql,django,encoding,character-encoding,Python,Mysql,Django,Encoding,Character Encoding,虽然有数百个这样的问题,但没有一个合适的答案帮助我理解和解决我的问题 我想在django安装中从SQLite数据库切换到MySQL数据库。一切正常,我仍然可以通过管理界面添加特殊字符,但是,在用户生成的输入上使用save()方法时,会出现编码错误 UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 5: ordinal not in range(128) 有什么提示吗 编辑 数据库字符集: m

虽然有数百个这样的问题,但没有一个合适的答案帮助我理解和解决我的问题

我想在django安装中从SQLite数据库切换到MySQL数据库。一切正常,我仍然可以通过管理界面添加特殊字符,但是,在用户生成的输入上使用
save()
方法时,会出现编码错误

UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 5: ordinal not in range(128)
有什么提示吗

编辑

数据库字符集:

mysql> show variables like "character_set_database";
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | utf8  |
+------------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like "collation_database";
+--------------------+-----------------+
| Variable_name      | Value           |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.00 sec)
完全回溯:

Traceback (most recent call last):
  File "myscript.py", line 48, in <module>
    add_categories_to_db()
  File "myscript.py", line 38, in add_categories_to_db
    cat.save()
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 545, in save
    force_update=force_update, update_fields=update_fields)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 573, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 654, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 687, in _do_insert
    using=using, raw=raw)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 232, in _insert
    return insert_query(self.model, objs, fields, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 1511, in insert_query
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 898, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 69, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 53, in execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/base.py", line 124, in execute
    return self.cursor.execute(query, args)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 159, in execute
    query = query % db.literal(args)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 264, in literal
    return self.escape(o, self.encoders)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 197, in string_literal
    return db.string_literal(obj)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 5: ordinal not in range(128)
回溯(最近一次呼叫最后一次):
文件“myscript.py”,第48行,在
将_类别_添加到_db()中
文件“myscript.py”,第38行,在add_categories_to_db中
拯救猫
文件“/usr/local/lib/python2.7/dist packages/django/db/models/base.py”,第545行,保存
强制更新=强制更新,更新字段=更新字段)
save_base中的文件“/usr/local/lib/python2.7/dist packages/django/db/models/base.py”,第573行
更新=自我。保存表格(原始、cls、强制插入、强制更新、使用、更新字段)
文件“/usr/local/lib/python2.7/dist packages/django/db/models/base.py”,第654行,在保存表中
结果=self.\u do\u insert(cls.\u base\u manager,using,fields,update\u pk,raw)
文件“/usr/local/lib/python2.7/dist packages/django/db/models/base.py”,第687行,插入
使用=使用,原始=原始)
文件“/usr/local/lib/python2.7/dist packages/django/db/models/manager.py”,第232行,插入
返回insert_查询(self.model、objs、字段、**kwargs)
文件“/usr/local/lib/python2.7/dist packages/django/db/models/query.py”,第1511行,插入查询
return query.get\u编译器(using=using).execute\u sql(return\u id)
文件“/usr/local/lib/python2.7/dist packages/django/db/models/sql/compiler.py”,第898行,在execute\u sql中
cursor.execute(sql,params)
文件“/usr/local/lib/python2.7/dist packages/django/db/backends/util.py”,执行中的第69行
返回super(CursorDebugWrapper,self).execute(sql,params)
文件“/usr/local/lib/python2.7/dist packages/django/db/backends/util.py”,执行中的第53行
返回self.cursor.execute(sql,params)
文件“/usr/local/lib/python2.7/dist packages/django/db/backends/mysql/base.py”,执行中的第124行
返回self.cursor.execute(查询,参数)
文件“/usr/lib/python2.7/dist packages/MySQLdb/cursors.py”,执行中的第159行
query=查询%db.literal(args)
文件“/usr/lib/python2.7/dist packages/MySQLdb/connections.py”,第264行,文本
返回self.escape(o,self.encoders)
文件“/usr/lib/python2.7/dist packages/MySQLdb/connections.py”,第197行,字符串形式
返回db.string_literal(obj)
UnicodeEncodeError:“ascii”编解码器无法对位置5中的字符u'\xfc'进行编码:序号不在范围内(128)

您的编码无法处理您给它的特殊字符。使用不同的编码或不使用特殊字符。另一种选择是将此特殊字符的所有实例替换为0-128范围内的另一个特殊字符(仅选择一个在数据中从未出现过的字符),然后在加载时再次替换。此错误是由于某些unicode值隐式编码为ASCII而导致的。你能给我们完整的追踪吗?您使用什么字符集配置数据库?数据库有默认编码、表编码和连接编码。哪个系统的编码?我的django应用程序可以处理它,因为它以前使用过sqlite,mysql db可以处理它,因为它可以从管理界面获取输入。