Я записал сценарий для генерации пользовательской Миниатюры для моих файлов сырых данных Nikon (.NEF).Пока все хорошо. Теперь имя файла миниатюры должно быть md5 полного пути изображения NEF, как указано здесь ссылки.
Мой сгенерированный md5 не соответствует тому, сгенерированному от системы, вот некоторые тесты с .jpg файлом
path = 'file:///home/ricardo/Área de Trabalho/TempImgX/capa_site_01.jpg'
StrNoSpecial = 'file%3A%2F%2F%2Fhome%2Fricardo%2F%C3%81rea%20de%20Trabalho%2FTempImgX%2Fcapa_site_01.jpg'
print(hashlib.md5((path).encode()).hexdigest())
print(hashlib.md5((StrNoSpecial).encode()).hexdigest())
Результат:
f9aa4e24d9942a1b120ecc5b7af360f9
5dd1386290a8ea7642d5864c349c28d4
md5 текущей рабочей миниатюры на ползунке. папка:
1f6cd39593b60e303d26856ffa471689
Поскольку Вы видите, что хеш отличается. Действительно ли специальные символы являются проблемой здесь?
Надлежащее кодирование для имени файла, кажется:
file:///home/ricardo/%C3%81rea%20de%20Trabalho/TempImgX/capa_site_01.jpg
Это: замените все пробелы %20
и это Á
с %C3%81
. Не заменяйте наклонные черты /
и двоеточие :
. Затем (в ударе):
filename="file:///home/ricardo/%C3%81rea%20de%20Trabalho/TempImgX/capa_site_01.jpg";
echo -n "$filename" | md5sum
1f6cd39593b60e303d26856ffa471689 -
Поскольку @Rinzwind сказал в комментарии,
Не только {пространство}, но и
! * ' ( ) ; : @ & = + $ , / ? % # [ ]
и любые символы, которые не находятся в A-Z (как диакритические знаки) [замена потребности.]
К сожалению, Вы не можете применить это правило к полному URI file:///home/ricardo/Área de Trabalho/TempImgX/capa_site_01.jpg
потому что это дает file%3A%2F%2F%2Fhome%2Fricardo%2F%C3%81rea%20de%20Trabalho%2FTempImgX%2Fcapa_site_01.jpg
и это не удалось.
Вместо этого алгоритм, на который инструмент NEF/thumbnail, кажется, работает как так:
/home/ricardo/Área de Trabalho/TempImgX/capa_site_01.jpg
) в /
в части/
file://
md5
к получившей строке.