gpt4 book ai didi

javascript - 在 C++ 中对扩展 ASCII std::string 进行 URL 编码

转载 作者:行者123 更新时间:2023-11-28 04:45:11 26 4
gpt4 key购买 nike

我有一个 std::string 填充了扩展的 ASCII 值(例如 čáě)。我需要对该字符串进行 URL 编码,以便 JavaScript 使用 DecodeURIComponent 进行解码。

我已经尝试将它转换为 UTF-16,然后通过 windows-1252 代码点转换为 UTF-8,但是由于没有足够的示例 >MultiByteToWideCharWideCharToMultiByte 函数。

我正在 Windows 10 64 位上使用 MSVC-14.0 进行编译。

我怎样才能至少遍历最终 UTF-8 字符串的各个字节以进行 URL 编码?

谢谢

最佳答案

您可以使用MultiByteToWideChar将字符串转换为UTF-16,然后将字符一个一个地编码。

示例代码:

std::string readData = "Extended ASCII characters (ěščřžýáíé)";
int size = MultiByteToWideChar(
1252, //1252 corresponds with windows-1252 codepoint
0,
readData.c_str(),
-1, //the string is null terminated, no need to pass the length
NULL,
0
);
wchar_t* wchar_cstr = new wchar_t[size];
MultiByteToWideChar(
1252,
0,
readData.c_str(),
-1,
wchar_cstr,
size
);
std::stringstream encodeStream;
for(uint32_t i = 0; i < size; i++){
wchar_t wchar = wchar_cstr[i];
uint16_t val = (uint16_t) wchar;
encodeStream << "%" << std::setfill('0') << std::setw(2) << std::hex << val;
}
delete[] wchar_cstr;

std::string encodedString = encodeStream.str(); // the URL encoded string

虽然这确实对基本的 ASCII 字符 ( < 128 ) 进行了编码,但它完全可以被 JavaScript 解码,这是最终目标。

关于javascript - 在 C++ 中对扩展 ASCII std::string 进行 URL 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49389832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com