Converter nomes de arquivos e caminhos codificados em URI do Linux em um arquivo de texto para caminhos do Windows

1

Eu tenho arquivos .m3u gerados no Linux que não podem ser lidos por programas do Windows devido à maneira diferente de tratar caracteres especiais em caminhos.

Por exemplo, como posso converter esse caminho do Linux:

Music/Timo%20Rautiainen%20&%20Trio%20Niskalaukaus/07%20H%C3%A4mmennys%20ja%20viha.mp3

neste caminho legível no Windows:

Music/Timo Rautiainen & Trio Niskalaukaus/07 Hämmennys ja viha.mp3

em um arquivo de texto?

Seria fácil se eu pudesse substituir todas as instâncias de% 20 por espaços, mas como você pode ver acima, há caracteres especiais (äöñ etc.) nos caminhos e nomes de arquivos que também precisam ser convertidos. Eles são muito variados para serem feitos com o regex, e eu nem tenho uma lista de todos os caracteres especiais em uso nos meus arquivos.

edit: como mencionado nos comentários, o texto acima é resultado da codificação URL / URI, em vez das razões que eu postei.

O conserto fácil era usar um codificador / decodificador de URL on-line, que corrigia os caminhos muito rapidamente. Este é o decodificador de URLs que usei . Resposta aceita abaixo com um método nativo do Python do Linux.

    
por bramford 07.02.2015 / 13:27

1 resposta

3

Se você não gosta do Perl, use o Python! ;]] Sério, este ou um one-liner Perl equivalente é a maneira mais fácil, se você não puder usar um aplicativo diferente para gerar listas M3U.

from sys import stdin
from urllib.parse import unquote

print(*map(unquote, stdin), sep='', end='')

Executar com:

python3 [script file] < [quoted m3u file] > [unquoted m3u8 file]

Observe que a extensão .m3u8 fornece ao aplicativo de leitura uma dica de que o arquivo é codificado em UTF-8. No Linux, isso pode não importar, porque na maioria das vezes é a codificação padrão, mas muitos aplicativos do Windows podem assumir a codificação windows-1250 ou qualquer que seja sua localidade.

    
por David Foerster 08.02.2015 / 21:36