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