Как использовать специальные символы md5 - миниатюры, связанные
Я написал скрипт для создания пользовательских миниатюр для моих файлов nikon raw (.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
Как видите, хеш отличается. Проблема в специальных символах?
1 ответ
Правильная кодировка имени файла выглядит следующим образом:
file:///home/ricardo/%C3%81rea%20de%20Trabalho/TempImgX/capa_site_01.jpg
То есть: заменить все заготовки на %20
и это Á
с %C3%81
, Не заменяйте косые черты /
и толстая кишка :
, Тогда (в bash):
filename="file:///home/ricardo/%C3%81rea%20de%20Trabalho/TempImgX/capa_site_01.jpg";
echo -n "$filename" | md5sum
1f6cd39593b60e303d26856ffa471689 -
Как сказал Rinzwind в комментарии,
Не просто {космос}, но
! * ' ( ) ; : @ & = + $ , / ? % # [ ]
и любые символы, которые не в AZ (как акценты) [нуждается в замене.]
К сожалению, вы не можете применить это правило ко всему URIfile:///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
в результирующую строку.