Исправьте URI Nautilus в скрипте Python

У меня есть очень простой скрипт на Python, который я написал в основном для целей обучения.

Открывает терминал в текущей папке. Однако я не могу заставить его работать в папках с акцентированными символами в URI (например, /home/pablo/Vídeos или /home/pablo/Área de Trabalho), потому что похоже, что URI Nautilus кодируются в эти значения% {number}. Есть ли способ преобразовать эти URI в нормализованные URI без необходимости переводить каждое возможное акцентированное значение вручную?

1
задан 7 April 2012 в 04:24

1 ответ

Это не очень понятно из вашего вопроса, но похоже, что вы ищете urllib . Обратите внимание, что urllib ожидает 8-битные строки, поэтому вам нужно будет сделать несколько причудливых операций декодирования / кодирования. Добро пожаловать в python2, довольно странная поддержка юникода, pythn3 намного лучше.

# -*- coding: utf-8 -*-
import urllib

url=u'/home/javier/Área'

url2 = url.encode('utf-8') # urllib expects 8-bit string
url3 = urllib.quote_plus(url2)
print url3  # >> %2Fhome%2Fjavier%2F%C3%81rea
url4 = urllib.unquote(url3) # It will return a 8-bit string
print url4  # >> /home/javier/Área
print url4.decode('utf-8')

Вы можете использовать urllib.qoute вместо * urllib.quote_plus *, он не будет заключать в кавычки пробелы, + (плюсы) и / (косые черты). Обе функции принимают строку в качестве второго параметра, они сохранят любой символ в этой строке как есть (я имею в виду, что он не будет заключаться в кавычки) в выходной строке. Обратите внимание, что значением по умолчанию для safe, именем второго параметра, является «/» для цитаты и «» для quote_plus. Если вы не включите косую черту в кавычку второго параметра, она изменится.

urllib.quote_plus('a/a','/')  # 'a/a'
0
ответ дан 7 April 2012 в 04:24

Другие вопросы по тегам:

Похожие вопросы: