Строка UTF-8 неправильно отображает символ

#python-3.x

#python-3.x

Вопрос:

Я возвращаю текстовое поле из столбца DB:

  "algún nombre de juego"
 

когда я пытаюсь использовать этот текст в html-файле, я получаю следующую строку:

 algún nombre de juego
 

Это происходит последовательно с любой строкой, которая не является чисто английской. Я даже пытался получать простой текст из Интернета на разных языках, и как только я вставляю их в текстовое поле html, распечатывается с неправильной кодировкой, как в примере выше.

Из документации по Юникоду для python следует, что UTF-8 должен быть способен обрабатывать практически любой символ на любом языке.

Я перепробовал много способов кодирования / декодирования, и либо возникает ошибка кодирования, либо я получаю странный символ там, где должна быть буква u с острым.

Согласно комментариям, я не использую Django или Flask. Просто берем строки из базы данных, которые могут быть на нескольких разных языках, и создаем HTML-файл для внутреннего использования.

Комментарии:

1. HTML — это не python. Вам необходимо преобразовать символы Юникода в их эквивалент HTML-сущности ( ú становится amp;uacute; )

2. @PranavHosangadi, правильно ли я понимаю, что мне нужно передать строку python, которая должна быть HTML, через BeautifulSoup или что-то подобное, чтобы выполнить преобразование? Или есть лучший подход?

3. @kravb Возможно, было бы неплохо также пометить этот вопрос фреймворком, который вы используете (например, Django или Flask), чтобы получить еще несколько ответов.

4. w3.org/International/questions/qa-html-encoding-declarations

Ответ №1:

Несколько идей:

1. Не забудьте объявить кодировку.Либо:

  • Вставьте a <meta charset="utf-8"> сразу после вашего <head> тега.

    или

  • сделайте это в заголовке HTTP (чтобы он выглядел примерно так Content-Type:text/html; charset=UTF-8 ). Это можно сделать, изменив настройки веб-сервера или используя код на стороне сервера, если вы решите разместить страницу.

2. Убедитесь, что ваша среда IDE сохраняет файлы как UTF-8. Это будет где-то в ваших настройках и должно выполняться автоматически, но стоит проверить, не работает ли опция 1.

Надеюсь, что один из этих вариантов работает.