Corrigir URIs do Nautilus em um script Python

1

Eu tenho um script Python muito básico que escrevi principalmente para fins de aprendizado.

Abre um terminal na pasta atual. No entanto, não consigo trabalhar em pastas com caracteres acentuados no URI (por exemplo, /home/pablo/Vídeos ou /home/pablo/Área de Trabalho ), porque parece que os URIs do Nautilus estão codificados para esses valores% {number}. Existe uma maneira de converter esses URIs para URIs normalizados sem ter que traduzir todos os possíveis valores acentuados manualmente?

    
por Pablo 31.03.2012 / 22:40

1 resposta

2

Não está muito claro na sua pergunta, mas parece que você está pesquisando urllib . Observe que o urllib espera sequências de 8 bits, portanto, você precisará executar um decodificador / codificação sofisticado. Bem-vindo ao suporte unicode um pouco estranho do python2, pythn3 é muito melhor.

# -*- 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')

Você pode usar urllib.qoute em vez de * urllib.quote_plus *, não irá citar espaços, + (vantagens) e / (barras). Ambas as funções aceitam uma string como um segundo parâmetro, elas manterão qualquer caractere nessa string como é (quero dizer, não irá citá-lo) na string de saída. Observe que o valor padrão para safe, o nome do segundo parâmetro, é '/' para aspas e '' para quote_plus. Se você não incluir uma barra na sua segunda cotação de parâmetro, ela será alterada.

urllib.quote_plus('a/a','/')  # 'a/a'
    
por Javier Rivera 02.04.2012 / 09:28