Пожалуйста, мне нужна помощь с Python 2.7. Я использую from string import Template а там ошибка с юникодом если я напечатаю строку без шаблона, работающего хорошо и если я распечатаю его под шаблоном появляются ошибки

AH01215: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 8: ordinal not in range(128)

Мой пример: 2 файла:

  • index.py
  • template.py

В template.py я использую этот код

#!/usr/bin/python
# -*- coding: utf-8 -*-
########################################################
#
from string import Template
ABC = Template("""<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Hello ${NAME}""")

И в index.py я использую этот код

#!/usr/bin/python
# -*- coding: utf-8 -*-
########################################################
import template
print "Content-Type: text/html\n"
ZXC = "m’a réveillé"
print template.ABC.substitute(dict(NAME=ZXC))

Если я использовал этот код, появится ошибка выше и если я распечатаю его напрямую без шаблона print ZXC, работающего хорошо

Как исправить это utf8 под шаблоном?

1
Master. net 21 Дек 2019 в 02:34
Привет, попробуйте это: ZXC = u"m’a réveillé".encode('ascii', 'xmlcharrefreplace')
 – 
Thiago Melo
21 Дек 2019 в 04:01

1 ответ

Это необходимо, чтобы избежать специальных символов, прежде чем кормить шаблон с ними. Но сначала укажите, что строка является Unicode. Я считаю, что ваш index.py должен просто стать:

#!/usr/bin/python
# -*- coding: utf-8 -*-
########################################################
import template
print "Content-Type: text/html\n"
ZXC = u"m’a réveillé".encode('ascii', 'xmlcharrefreplace')
print template.ABC.substitute(dict(NAME=ZXC))
1
Thiago Melo 21 Дек 2019 в 04:11
Спасибо за ответ, я считаю, что проблема в результатах sql также должна быть добавлена ​​.encode ('UTF-8')
 – 
Master. net
21 Дек 2019 в 11:57