将URL编码为安全的文件名字符串
Encode URLs into safe filename string
我正在编写一个简单的C++类,我想在其中缓存从web下载的图像的图片缩略图版本。因此,我想使用一个散列函数,它接收URL字符串并输出一个适合作为文件名的唯一字符串。
有没有一种简单的方法可以在不重新编写函数的情况下做到这一点?我四处寻找一个简单的图书馆,但什么也找不到。这当然是一个常见的问题。
在类似的情况下,我用十六进制对密钥的字节进行了编码(在您的例子中,密钥是URL的哈希)。这使大小增加了一倍,但很简单,避免了文件系统损坏字符时可能出现的任何问题,并按照与原始键相同的顺序进行排序。
(最初我尝试了一种稍微花哨、更高效的编码,我认为它可以避免任何有问题的字符,但OSX的文件系统比我想象的更疯狂。)
一种更简单的方法是用下划线替换所有不是字符或数字的内容。
编辑:这是一个简单的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] = '_';
}
}
boost::hash
怎么样?
相关文章:
- 如何在目录及其子文件夹中构建文件名字符串向量?
- 无法创建栅格堆栈,因为我无法连接字符串(dir_name + 文件名)
- 无法打开存储在字符串C++中的文件名
- 字符串作为文件名
- C++搜索文件名指针指向字符串 strcmp 错误
- 使用文件名作为字符串从任意souce .cpp文件中调用函数
- C++ GetModule文件名不会返回正确的字符串
- 使用字符串缓冲区文件名更改OFStream的目录
- 来自其他字符串的输出文件名
- 如何在 tchar 中添加格式化字符串(用于多个文件名等)
- Cpp 预处理器和文件名的基本名称,行号为字符串
- 为什么 fstream.open(文件名) 适用于文字而不是生成的字符串?
- 使用字符串将文件名传递给 fstream
- gengetopt:如何解析没有选项(如文件名)的字符串
- 在cpp中串联字符串和int作为文件名
- 7zip 字符串/流压缩 PHP/C?存档中没有文件名/日期存储.7z每个字节都很重要
- 将文件名转换为c字符串
- c++将文件的路径组合为字符串和文件名
- 适用于短文件名的最佳字符串哈希函数
- 将URL编码为安全的文件名字符串