2010-01-04 5 views
2

Пользователь ввел словоПочему он печатает забавные персонажи? unicode проблема?

éclair 

в поле поиска.

Showing results 1 - 10 of about 140 for �air. 

Почему это показывает странный знак вопроса? Я использую Django для его отображения:

Showing results 1 - 10 of about 140 for {{query|safe}} 
+3

Unicode это не проблема, это решение. –

ответ

8

Это проблема кодирования. Скорее всего, ваша форма или страница вывода не кодируются в кодировке UTF-8.

Эта статья очень хорошее чтение по этому вопросу: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

Вы должны проверить кодировку

  • HTML-страница, на которой пользователь ввел слово
  • HTML-страницу, которую вы используются для вывода слова
  • многобайтовая способность функций, которые вы используете для работы со строкой (хотя это, вероятно, не проблема в Python)

Если поиск будет применяться к базе данных, вам необходимо будет проверить кодировку соединения с базой данных, а также кодировку ваших таблиц и столбцов.

+0

Эта связь выигрывает так сильно. +1 Интернетов к вам. –

0

Вы обслуживаете страницу с неправильной кодировкой символов (charset). Убедитесь, что вы используете одну и ту же кодировку во всем своем приложении (например, UTF-8). Это включает в себя:

  • HTTP заголовки из веб-сервера (Content-Type: текст/HTML, кодировка = UTF-8)
  • Связь с базой данных (т.е. SET NAMES 'UTF-8')
0

Также было бы неплохо проверить настройку кодировки вашего браузера.

1

Это результат, когда вы интерпретируете данные, которые не кодируются в UTF-8 как кодированные UTF-8.

Интерпретатор ожидает от кодовой точки вашего первого символа слова éclair многобайтового кодированного символа длиной в три символа, потребляет следующие два символа, но не может его декодировать (возможно, неверная последовательность байтов). В этом случае отображается ЗАМЕНА ХАРАКТЕРА (U + FFFD).

Так что в вашем случае вам просто нужно действительно закодировать свои данные с помощью UTF-8.

0

Вторые ответы выше. Некоторые другие вещи с верхней части головы:

Если вы используете, например,базы данных MySQL, то это может быть хорошо, чтобы создать базу данных с помощью:

CREATE DATABASE х CHARACTER SET UTF8

Вы также можете проверить это: http://docs.djangoproject.com/en/dev/ref/settings/#default-charset

Смежные вопросы