Вы должны просто поместить значения в круглые скобки:
'%s in %s' % (unicode(self.author), unicode(self.publication))
Здесь для первого %s
будет помещен unicode(self.author)
. И для второго %s
будет использоваться unicode(self.publication)
.
Примечание. Вы должны
blockquote>string formatting
использовать%
Notation. Подробнее здесь
title = u"Klüft skräms inför på fédéral électoral große"
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')
'Kluft skrams infor pa federal electoral groe'
Никакой answere не работал на мой случай, где у меня была строковая переменная, содержащая unicode символы, и не закодируйте - декодируют объясненный, здесь сделал работу.
, Если я делаю в Терминале
echo "no me llama mucho la atenci\u00f3n"
или
python3
>>> print("no me llama mucho la atenci\u00f3n")
, вывод корректен:
output: no me llama mucho la atención
, Но работающий со сценариями, загружающими эту строковую переменную, не работал.
Это - то, что работало над моим случаем , в случае, если помогает кому-либо:
string_to_convert = "no me llama mucho la atenci\u00f3n"
print(json.dumps(json.loads(r'"%s"' % string_to_convert), ensure_ascii=False))
output: no me llama mucho la atención
Вот пример:
>>> u = u'€€€'
>>> s = u.encode('utf8')
>>> s
'\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'
Что ж , если вы хотите / готовы переключиться на Python 3 (чего может не быть из-за обратной несовместимости с некоторым кодом Python 2), вам не нужно выполнять какое-либо преобразование; весь текст в Python 3 представлен строками Unicode, что также означает, что синтаксис u '
больше не используется. У вас также есть то, что по сути является строками байтов, которые используются для представления данных (которые могут быть закодированной строкой).
Если у вас есть строка Unicode, и вы хотите записать ее в файл или другую сериализованную форму, вы должны сначала закодировать ее в определенное представление, которое может быть хранится. Существует несколько распространенных кодировок Unicode, таких как UTF-16 (использует два байта для большинства символов Unicode) или UTF-8 (1-4 байта / кодовая точка в зависимости от символа) и т. Д. Чтобы преобразовать эту строку в определенную кодировку, вы можно использовать:
>>> s= u'£10'
>>> s.encode('utf8')
'\xc2\x9c10'
>>> s.encode('utf16')
'\xff\xfe\x9c\x001\x000\x00'
Эта необработанная строка байтов может быть записана в файл. Однако обратите внимание, что при чтении его обратно вы должны знать, в какой кодировке он находится, и декодировать его, используя ту же самую кодировку.
При записи в файлы вы можете избавиться от этого ручного процесса кодирования / декодирования, используя модуль кодеков . Итак, чтобы открыть файл, который кодирует все строки Unicode в UTF-8 , используйте:
import codecs
f = codecs.open('path/to/file.txt','w','utf8')
f.write(my_unicode_string) # Stored on disk as UTF-8
Обратите внимание, что все, кто использует эти файлы, должны понимать, в какой кодировке находится файл, если они хотят их прочитать. Если вы единственный, кто выполняет чтение / запись, это не проблема, в противном случае убедитесь, что вы пишете в форме, понятной для всех, кто использует файлы.
В Python 3 эта форма доступа к файлам используется по умолчанию , а встроенная функция open
будет принимать параметр кодировки и всегда переводить в / из строк Unicode (строковый объект по умолчанию в Python 3) для файлов, открытых в текстовом режиме.
Вы можете использовать кодирование в ASCII, если вам не нужно переводить символы, отличные от ASCII:
>>> a=u"aaaàçççñññ"
>>> type(a)
<type 'unicode'>
>>> a.encode('ascii','ignore')
'aaa'
>>> a.encode('ascii','replace')
'aaa???????'
>>>