Если у вас есть фактические строки Unicode, вы можете сделать
# -*- coding: utf-8 -*-
s = u'سلام'
print s.encode('unicode-escape')
выход
\u0633\u0644\u0627\u0645
директива # -*- coding: utf-8 -*-
чисто сказать переводчику, что исходный код UTF-8 кодируются, он не имеет никакого отношения, как сам скрипт обрабатывает Unicode.
Если ваш скрипт читает эту арабскую строку из UTF-8 кодируемого источника, байт будет выглядеть следующим образом:
\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85
Вы можете конвертировать, что в Unicode, как это:
data = '\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85'
s = data.decode('utf8')
print s
print s.encode('unicode-escape')
выход
سلام
\u0633\u0644\u0627\u0645
Конечно, вам нужно убедиться, что ваш терминал настроен правильно обрабатывать Unicode.
Обратите внимание, что
'\u0633\u0644\u0627\u0645'
представляет собой обычный (байт) строка, содержащая 24 байта, в то время как
u'\u0633\u0644\u0627\u0645'
является строкой Unicode, содержащий 4-х символов Unicode.
Вы можете найти эту статью полезной: Pragmatic Unicode, которая была написана ветеранкой СО Ned Batchelder.
Ну, пока это работает в терминале, мне нужно назначить вывод новой переменной. Это невозможно сделать с помощью 'print' в my views.py. Любые идеи, чтобы исправить это? – supermario
@supermario Что-то вроде этого должно работать: 'a = s.encode ('unicode-escape')' –