Я только что прошел ту же проблему и нашел хорошее решение в руководствах PHP.
Я изменил всю свою кодировку файла на UTF8, а затем по умолчанию на мое соединение. Это решило все проблемы.
if (!$mysqli->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
printf("Current character set: %s\n", $mysqli->character_set_name());
}
Если текст содержит данные, отличные от ascii, тогда вы должны указать его как строку Юникода для el.text
.
Поскольку ответ @Abbasov Alexander показывает, что вы можете сделать это, используя Юникодный литерал u''
. Python не вызывает исключения, поэтому я предполагаю, что вы объявили кодировку символов вашего исходного файла Python (например, используя комментарий # coding: utf-8
вверху). Эта кодировка определяет, как Python интерпретирует не-ascii-символы в источнике, он не имеет отношения к кодировке, которую вы используете для сохранения xml в файл.
Если текст уже находится в переменной и вы не преобразовали это еще до Unicode, вы можете сделать это, используя text.decode(text_encoding)
(text_encoding
могут быть не связаны с исходной кодировкой Python).
Запутанным битом может быть то, что el.text
(как оптимизация) возвращает bytestring на Python 2 для чистых данных ascii. Это нарушает правило, что вы не должны смешивать байты и строки Unicode. Хотя он должен работать, если sys.getdefaultencoding()
возвращает кодировку на основе ascii, как и в большинстве случаев.
Чтобы сохранить xml, передайте любую кодировку символов, которая вам понадобится для функций tostring()
или ElementTree.write()
. Опять же, это кодирование не связано с другими уже упомянутыми кодировками.
В общем, используйте Unicode sandwich : декодируйте байты в Unicode, как только вы их получите, работайте с текстом Unicode внутри вашего программы, кодировать в байты как можно позже, когда вам нужно отправить текст с помощью API, который не поддерживает Unicode (файлы, сеть).
Если у вас есть версия python & lt; 3 вы можете попробовать: el.text = u'Disponible à partir du 1er Octobre'