URLs codificar em cadeia de nome de arquivo segura
Pergunta
Eu estou escrevendo uma classe simples C ++ em que eu gostaria miniaturas de fotografias cache de versões de imagens baixados da web. Como tal, eu gostaria de usar uma função hash que leva em cadeias de URL e gera uma cadeia exclusiva adequado como um nome de arquivo.
Existe uma maneira simples de fazer isso sem re-escrever a função de mim mesmo? Eu procurei em torno de uma biblioteca simples, mas não consegui encontrar nada. Certamente este é um problema comum.
Solução
Uma abordagem mais simples é substituir tudo o que não é um personagem ou um número com um sublinhado.
EDIT: Aqui está uma implementação simples em C:
#include <cctype>
char *safe_url(const char *str) {
char *safe = strdup(str);
for (int i = 0; i < strlen(str); i++) {
if (isalpha(str[i]))
safe[i] = str[i];
else
safe[i] = '_';
}
}
Outras dicas
Em uma situação semelhante I codificado bytes da chave em hexadecimal (onde, no seu caso, a chave é o hash do URL). Isso duplica o tamanho, mas é simples, evita possíveis problemas com seu sistema de arquivos desconfiguração os personagens e tipos na mesma ordem que a chave original.
(Originalmente eu tentei uma codificação um pouco mais sofisticado, mais eficiente, o que achei escapou quaisquer caracteres problemáticos, mas sistema de arquivos do OS X acaba por ser mais louco do que eu assumi.)
E sobre boost::hash
?