首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在c++中编码已解码的urls

在 C++ 中对 URL 进行编码和解码可以使用标准库中的一些函数和手动处理字符串。URL 编码(也称为百分号编码)是将 URL 中的特殊字符转换为 % 后跟两个十六进制数字的形式。解码则是将这些编码还原为原始字符。

URL 编码

URL 编码的主要步骤是:

  1. 将特殊字符转换为 % 后跟两个十六进制数字。
  2. 保留字母、数字和某些特殊字符(如 -, _, .~)。

URL 解码

URL 解码的主要步骤是:

  1. % 后跟的两个十六进制数字转换为相应的字符。

示例代码

以下是一个简单的 C++ 示例,展示了如何进行 URL 编码和解码:

代码语言:javascript
复制
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <cctype>

// URL 编码函数
std::string url_encode(const std::string &value) {
    std::ostringstream escaped;
    escaped.fill('0');
    escaped << std::hex;

    for (char c : value) {
        // 保留字母、数字和某些特殊字符
        if (isalnum(static_cast<unsigned char>(c)) || c == '-' || c == '_' || c == '.' || c == '~') {
            escaped << c;
        } else {
            // 将其他字符转换为 % 后跟两个十六进制数字
            escaped << '%' << std::setw(2) << int(static_cast<unsigned char>(c));
        }
    }

    return escaped.str();
}

// URL 解码函数
std::string url_decode(const std::string &value) {
    std::string result;
    result.reserve(value.size());

    for (size_t i = 0; i < value.size(); ++i) {
        if (value[i] == '%' && i + 2 < value.size()) {
            // 将 % 后跟的两个十六进制数字转换为字符
            std::istringstream hex_stream(value.substr(i + 1, 2));
            int hex_value;
            if (hex_stream >> std::hex >> hex_value) {
                result += static_cast<char>(hex_value);
                i += 2;
            } else {
                result += '%';
            }
        } else if (value[i] == '+') {
            // 将 + 转换为空格
            result += ' ';
        } else {
            result += value[i];
        }
    }

    return result;
}

int main() {
    std::string original = "Hello, World! 你好,世界!";
    std::string encoded = url_encode(original);
    std::string decoded = url_decode(encoded);

    std::cout << "Original: " << original << std::endl;
    std::cout << "Encoded: " << encoded << std::endl;
    std::cout << "Decoded: " << decoded << std::endl;

    return 0;
}

解释

  1. URL 编码函数 url_encode
    • 使用 std::ostringstream 来构建编码后的字符串。
    • 对于每个字符,如果是字母、数字或某些特殊字符(-, _, .~),则直接添加到结果中。
    • 对于其他字符,将其转换为 % 后跟两个十六进制数字。
  2. URL 解码函数 url_decode
    • 遍历输入字符串,对于每个字符:
      • 如果是 %,则读取接下来的两个字符并将其解释为十六进制数,然后转换为相应的字符。
      • 如果是 +,则转换为空格。
      • 其他字符直接添加到结果中。
  3. 主函数 main
    • 演示了如何使用 url_encodeurl_decode 函数对字符串进行编码和解码。

注意事项

  • 这个示例代码假设输入字符串是有效的 URL 编码字符串。如果输入字符串包含无效的编码(例如 % 后面不是两个十六进制数字),解码函数可能会产生意外结果。
  • 在实际应用中,可能需要对输入进行更多的验证和错误处理。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

21分26秒

102-比较规则_请求到响应过程中的编码与解码过程

24秒

LabVIEW同类型元器件视觉捕获

1时14分

应用上线要求快,企业如何低成本快速接入音视频服务?

25分35秒

新知:第四期 腾讯明眸画质增强-数据驱动下的AI媒体处理

1分30秒

基于强化学习协助机器人系统在多个操纵器之间负载均衡。

31分41秒

【玩转 WordPress】腾讯云serverless搭建WordPress个人博经验分享

领券