将URL编码为安全文件名字符串

时间:2008-11-03 22:53:16

标签: c++ url caching hash filenames

我正在编写一个简单的C ++类,我想在其中缓存从Web下载的图像缩略图版本。因此,我想使用一个哈希函数,它接收URL字符串并输出一个适合作为文件名的唯一字符串。

有没有一种简单的方法可以在不重新编写函数的情况下执行此操作?我四处寻找一个简单的图书馆,却找不到任何东西。当然这是一个普遍的问题。

3 个答案:

答案 0 :(得分:3)

在类似的情况下,我用十六进制编码了密钥的字节(在你的情况下,密钥是URL的哈希值)。这个大小加倍但很简单,避免了文件系统损坏字符时出现的任何问题,并按照与原始密钥相同的顺序排序。

(最初我尝试了一种稍微更高效,更有效的编码,我认为它逃脱了任何有问题的字符,但OS X的文件系统比我想象的要疯狂。)

答案 1 :(得分:1)

更简单的方法是用下划线替换不是字符或数字的所有内容。

编辑:这是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] = '_';
    }
}

答案 2 :(得分:0)

boost::hash怎么办?