Python 2.7 интерпретирует строковые литералы как ASCII, а не юникод, и поэтому, даже если вы пытались включить символы юникода в свой аргумент для foo.replace
, replace
просто видит ASCII {'\', 'u', '2', '0', '1', '9'}
. Это связано с тем, что Python не присваивает специальное значение "\u"
, если только он не анализирует литерал Юникода.
Чтобы сообщить Python 2.7, что это строка в кодировке Unicode, вы должны добавить к строке префикс u
, как в foo.replace(u'\u2017', "'")
.
Кроме того, чтобы указать начало кода Unicode, вам нужно \u
, а не \\u
- последний указывает, что вы хотите фактический '\'
в строке, за которым следует 'u'
.
Наконец, обратите внимание, что foo
не изменится в результате вызова replace
. Вместо этого replace
вернет значение, которое вы должны присвоить новой переменной, например:
bar = foo.replace(u'\u2017', "'")
print bar
(см. Stackoverflow.com/q/26943256/4909087)