2014-11-11 4 views
0

Надеюсь, это будет легко. У меня есть URL:Как преобразовать процентный код в строку с символами не-ascii?

http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napol%C3%A9on.jpg

, который сохраняется в файл JSON с этим кодом:

paintings = get_all_paintings(marc_chagall) 
with open('chagall.json', 'w') as fb: 
    x = json.dump(paintings, fb) 

В файле, то URL стал:

u'http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napol\xe9on.jpg' 

Я способный получить исходный, полезный, процентно-кодированный URL с этим кодом:

p = u'http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napol\xe9on.jpg' 
p = urllib.quote(p.encode('utf8'), safe='/:') 
print repr(p) 
> 'http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napol%C3%A9on.jpg' 

Теперь идет сложная часть. Я хочу получить эту строку:

http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napoléon.jpg 

с символом non-ascii в napoléon нетронутым. Это для целей именования в ведре хранения, а не для чего-либо еще. Как я могу создать эту строку?

ответ

4

Просто распечатайте значение Юникода:

>>> print u'http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napol\xe9on.jpg' 
http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napoléon.jpg 

Не путайте представление питон значения Unicode (который намеренно используя побеги для не-ASCII символов для удобства отладки и интроспекции) с реальная стоимость.

Печать кодирует значение кодеку, используемому вашей консолью или терминалом, при условии, что Python смог ее обнаружить. Мой терминал настроен на UTF-8, поэтому Python закодировал UID-код U400E9 с кодовым номером в C3 A9, а мой терминал затем интерпретировал это как UTF-8 и отобразил é.

Это всего лишь означает, что вы уже имеете нулевое значение, но были выброшены отладочным выходом.

+0

Я хочу сохранить последнюю часть переменной, например 'x.split ('/') [- 1]' –

+0

@edmund_spenser: тогда просто сделайте это. Строки Unicode поддерживают разделение так же, как строки байтов. –

+0

Я был действительно выброшен, как вы сказали, пиновым представлением значения Unicode. Я не понимал, что у меня было. –

1

Вы уже есть:

print u'http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napol\xe9on.jpg' 

Значение p уже уже эта строка, это только отображается по-разному.

+0

Это печатает его на консоли, но как сохранить его в переменной и сохранить его? –

+0

@edmund_spenser: переменная 'p' уже содержит нужную строку (точно), она отображается только по-разному (последовательность' \ xe9' - это символ, который вы хотите). –

Смежные вопросы