LINUX.ORG.RU

Борьба с юникодом

 ,


0

1

Всем привет!

Пишу первую поделку на Flask. Раньше доводилось писать только админские скрипты.

Есть файл (UTF-8 без BOM) с вьетнамскими словами, его надо некоторым образом распарсить и отдать страничку, использую шаблон. Беда в том, что если прочитать из файла «Việt Nam», то на странице вместо я получаю «ViГЄМЈt Nam». Всё не-ASCII превращается в кашу.

Однако, если прямо в коде присвоить не-ASCII текст переменной, а потом переменную передать в шаблон, то всё хорошо. Между переменными есть разница:

app.logger.info(fromfile)
[...] INFO in views: Việt Nam
# так на страничке каша^^^

# а это работает:
definedincode = "Việt Nam"
app.logger.info(definedincode)
[...] INFO in views: Vi\xea\u0323t Nam\u0300

Тексту из файла можно сделать encode/decode:

app.logger.info(fromfile.encode('unicode_escape').decode("utf-8"))
[...] INFO in views: Vi\u0413\u0404\u041c\u0408t Nam

Но на работающий вариант всё равно не похоже. В этом случае на страничке отдаётся сырое необработанное «Vi\u0413\u0404\u041c\u0408t Nam».

Помогите с магией.

★★★★

app.logger.info(fromfile.encode('unicode_escape').decode(«utf-8»))

попробуй это не в лог отдать, а в шаблонизатор. может сработать

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

Это явно не сработает, decode('utf-8') не будет его экранированные юникодные символы обратно в юникод декодировать, так и будет \uXXXX

pawnhearts ★★★★★
()
Ответ на: комментарий от anonymous

Работает! Добра тебе, анон.

muon ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.