如何用Boost URL跨平台将绝对文件路径转换为标准File URI?
用Boost URL库实现跨平台绝对文件路径转File URI
当然可以用Boost URL库实现这个转换,你之前的代码问题在于没有正确处理File URI的格式规范以及路径编码:
- File URI的标准格式要求
file:///开头(对应scheme为file,authority部分为空),你之前的代码未设置authority,导致只输出file:开头的格式 - 路径中的特殊字符(比如Windows盘符的冒号、斜杠)需要进行URL编码,直接调用
set_path不会自动完成完整转义
以下是修正后的代码:
#include <boost/url.hpp> #include <iostream> #include <string> namespace urls = boost::urls; int main() { std::string file_path = "c:/path/to/file.txt"; urls::url file_uri; // 设置URI的scheme为file file_uri.set_scheme("file"); // 设置空authority,生成file:///的前缀格式 file_uri.set_authority(""); // 对文件路径进行URL编码,确保特殊字符被正确转义 file_uri.set_path(urls::encode_path(file_path, urls::encode_opts().set_space_plus(false))); std::cout << file_uri << "\n"; }
这段代码的输出结果为file:///c%3A%2Fpath%2Fto%2Ffile.txt,完全符合预期格式。
该实现支持跨平台:
- 对于类Unix系统的路径(如
/home/user/documents/note.txt),会生成符合规范的file:///home/user/documents/note.txt(特殊字符自动编码) - 对于Windows系统的盘符路径,会自动对冒号、斜杠等字符进行URL转义
内容的提问来源于stack exchange,提问作者ThomasL.
相关产品推荐
相关产品推荐

