UnicodeEncodeError: кодек «latin-1» не может кодировать символы в позиции 0-1: порядковый номер не в диапазоне (256)

Я новичок в python. Сегодня, когда я пишу какую-то функцию поиска, я встретил ошибку. Хорошо, я использую sqlalchemy orm, чтобы сделать это, в моей функции я ввожу китайское слово в качестве ключевого слова. Страница html дает мне UnicodeEncodeError at / user / search: 'latin-1' кодек не может кодировать символы в позиции 0-1: порядковый номер не в диапазоне (256). и мой код выглядит так:

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) 

и Traceback находится здесь:

 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)` 

когда я встретил ошибку, я сделал тест в оболочке python, он работал хорошо, код здесь:

from apps.user.models import Пользователь user = User.get_by_name ('某人') .first () print user print user.name 某人

так что я могу сделать, чтобы это сработало на моей странице html?

2 Solutions collect form web for “UnicodeEncodeError: кодек «latin-1» не может кодировать символы в позиции 0-1: порядковый номер не в диапазоне (256)”

Я предполагаю, что вы используете MySQL с драйвером MySQLdb здесь.

Кодировка по умолчанию, используемая драйвером MySQLdb, – это латинский-1, который не поддерживает ваш набор символов. Вам нужно будет использовать UTF-8 (или другие, но UTF-8 является наиболее распространенным), чтобы иметь возможность связываться с вашей базой данных через MySQLdb (см. http://docs.sqlalchemy.org/en/rel_0_8/dialects/ mysql.html # unicode ).

Чтобы сделать это, создайте свой движок со следующей строкой:

 create_engine('mysql+mysqldb://USER:@SERVER:PORT/DB?charset=utf8', encoding='utf-8') 

Вы также можете create engine свой URL-адрес двигателя, используя класс sqlalchemy.engine.url.URL , и отправить его в функцию create engine . Я считаю это полезным, когда у вас есть настройки в файле конфигурации.

 import sqlalchemy.engine.url as url engine_url = url.URL( drivername='mysql+' + cfg['MYSQL_PYTHON_DRIVER'], host=cfg['MYSQL_HOST'], port=cfg['MYSQL_PORT'], username=cfg['MYSQL_USER'], password=cfg['MYSQL_PWD'], database=cfg['MYSQL_DB'], query={'charset': 'utf8'} ) db = create_engine(engine_url, encoding='utf-8') 

Надеюсь, это поможет.

на основе вашего stacktrace вы используете MySQL Python с включенной кодировкой Unicode, поскольку он выполняет кодировку. Поэтому вам, вероятно, нужно указать компиляторную кодировку (обратите внимание, что это все настройки, используемые DBDI MySQLdb, SQLalhcemy просто передает их):

 create_engine('mysql+mysqldb:///mydb?charset=utf8&use_unicode=1') 

http://docs.sqlalchemy.org/en/rel_0_8/dialects/mysql.html#unicode

  • Какой тип используется для хранения байтовых строк в SQLAlchemy?
  • Автозаполнение Pycharm SqlAlchemy не работает
  • Быстрый и грязный CRUD-интерфейс для SQLAlchemy?
  • SQLAlchemy, как фильтровать по детям от многих до многих
  • Фляга-Беспокойные свалки Десятичное значение от фляги-шквалы
  • Динамическое построение фильтров в SQLAlchemy
  • Как определить метакласс для класса, который простирается от декларативной базы sqlalchemy
  • sqlalchemy атрибуты отношения внешнего ключа
  • Python - лучший язык программирования в мире.