UnicodeEncodeError: "latin-1" codec ne peut pas encoder des caractères en position 0-1: ordinal pas dans la gamme(256)
je suis une nouvelle dans python.Aujourd'hui, quand j'écris des fonction de recherche, j'ai rencontré une erreur.eh bien, j'utilise sqlalchemy orm pour ce faire, dans ma fonction,je la saisie d'un mot chinois que le mot-clé.La page html de me donner un UnicodeEncodeError /utilisateur/recherche: "latin-1" codec ne peut pas encoder des caractères en position 0-1: ordinal pas dans la gamme(256).
et mon code ressemble à ceci:
def user_search(request):
name = request.GET.get('name').strip()
user_list = list()
if name:
user_list = User.get_by_name(name)
class User(object):
@classmethod
def get_by_name(cls, name):
return DBSession.query(cls).filter(cls.name==name)
et le Traceback est ici:
Traceback:
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/home/jiankong/git/admin-server/lib/decorators.py" in wrapper
75. return func(request, *args, **kwargs)
File "/home/jiankong/git/admin-server/lib/decorators.py" in wrapper
39. output = function(request, *args, **kwargs)
File "/home/jiankong/git/admin-server/apps/user/user_views.py" in user_search
47. users = jump_page(paginator, page)
File "/home/jiankong/git/admin-server/apps/user/utils.py" in jump_page
92. return paginator.page(1)
File "/usr/local/lib/python2.6/dist-packages/django/core/paginator.py" in page
37. number = self.validate_number(number)
File "/usr/local/lib/python2.6/dist-packages/django/core/paginator.py" in validate_number
28. if number > self.num_pages:
File "/usr/local/lib/python2.6/dist-packages/django/core/paginator.py" in _get_num_pages
60. if self.count == 0 and not self.allow_empty_first_page:
File "/usr/local/lib/python2.6/dist-packages/django/core/paginator.py" in _get_count
48. self._count = self.object_list.count()
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/orm/query.py" in count
2414. return self.from_self(col).scalar()
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/orm/query.py" in scalar
2240. ret = self.one()
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/orm/query.py" in one
2209. ret = list(self)
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/orm/query.py" in __iter__
2252. return self._execute_and_instances(context)
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/orm/query.py" in _execute_and_instances
2267. result = conn.execute(querycontext.statement, self._params)
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/engine/base.py" in execute
664. params)
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/engine/base.py" in _execute_clauseelement
764. compiled_sql, distilled_params
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/engine/base.py" in _execute_context
871. context)
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/engine/default.py" in do_execute
324. cursor.execute(statement, parameters)
File "/usr/local/lib/python2.6/dist-packages/MySQL_python-1.2.4-py2.6-linux-i686.egg/MySQLdb/cursors.py" in execute
183. query = query % db.literal(args)
File "/usr/local/lib/python2.6/dist-packages/MySQL_python-1.2.4-py2.6-linux-i686.egg/MySQLdb/connections.py" in literal
264. return self.escape(o, self.encoders)
File "/usr/local/lib/python2.6/dist-packages/MySQL_python-1.2.4-py2.6-linux-i686.egg/MySQLdb/connections.py" in unicode_literal
202. return db.literal(u.encode(unicode_literal.charset))
Exception Type: UnicodeEncodeError at /user/search
Exception Value: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)`
quand j'ai rencontré l'erreur, j'ai fait un test en python shell, il a bien fonctionné,le code est ici:
des applications.de l'utilisateur.importation de modèles de l'Utilisateur
utilisateur = Utilisateur.get_by_name('某人').(première)
utilisation de l'impressionutilisation de l'impression.nom
某人
alors, que puis-je faire afin que cela a fonctionné dans ma page html?beaucoup apprécié!!
User.name
est une Chaîne? Essayez de le changer en Unicode.OriginalL'auteur jiank | 2013-05-06
Vous devez vous connecter pour publier un commentaire.
Je suis en supposant que vous utilisez MySQL avec le MySQLdb pilote ici.
L'encodage utilisé par défaut par le MySQLdb pilote est en latin-1, qui ne prend pas en charge votre jeu de caractères. Vous aurez besoin d'utiliser l'UTF-8 (ou d'autres, mais UTF-8 est la plus commune), être en mesure de communiquer avec votre base de données par le biais de MySQLdb (voir http://docs.sqlalchemy.org/en/rel_0_8/dialects/mysql.html#unicode).
De faire une telle chose, créez votre moteur avec la ligne suivante:
Vous pouvez également construire votre moteur d'url à l'aide de la
sqlalchemy.engine.url.URL
de classe, et l'envoyer à l'create engine
fonction. Je trouve qu'il est utile lorsque vous avez vos paramètres dans un fichier de config.Espère que ça aide.
OriginalL'auteur Balthazar Rouberol
basé sur votre stacktrace, vous utilisez MySQL Python avec l'encodage unicode allumé, puisque c'est de faire un encodage. Donc, vous avez probablement besoin de spécifier un comaptible encodage (remarque c'est tous les paramètres utilisés par le MySQLdb DBAPI, SQLalhcemy juste transmet par le biais d'):
http://docs.sqlalchemy.org/en/rel_0_8/dialects/mysql.html#unicode
OriginalL'auteur zzzeek