gpt4 book ai didi

带有utf8字符错误的C++ URL解码

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:43:47 24 4
gpt4 key购买 nike

在 C++ Visual Studio 中,我无法找到任何解决方案来解决我在编码 URL 中使用 utf8 字符的问题。

我有这个 url 编码的字符串:

//Encoded
%5C%CE%A4%CE%B5%CF%83%CF%84%5C
//Decoded
\Τεστ\

在任何具有 php 函数的在线编码器和解码器中,上面的编码字符串将为您提供解码后的正确字符串,但在 c++ visual studio 中,我对解码 url 代码所做的任何尝试都失败了。

我在我的项目中使用 Unicode 字符集,我检索这个编码的 url 为:(p.s. 我不能改变我接收它的方式 - 它是一个编码的 url std:string)

std:string EncURL = "%5C%CE%A4%CE%B5%CF%83%CF%84%5C";

然后我尝试使用来自互联网的许多解码功能以使其可读并使用它但它总是返回我汉字而不是正确的汉字。下面是我尝试过的许多函数中的一个,它仅在编码的 url 中没有 utf8 字符时才有效。

string url_decode(string src){
string ret;
char ch;
int i,ii;
for(i=0; i<src.length(); i++){
if(int(src[i]) == 37){
sscanf(src.substr(i+1,2).c_str(), "%x", &ii);
ch = static_cast<char>(ii);
ret += ch;
i = i+2;
}else{
ret += src[i];
}
}
return (ret);
}

谁能给我一个好的方法或解决方案来制作 URL 解码功能,即使里面有 utf8 字符也能正常工作?在 std:string EncURL 之后使用任何类型或任何方式都没有关系,我只需要在 c++ 中为我收到的字符串提供一个正确的 urldecoder。

------------更新

对于从 C++ 中打开 URL 或打开文件路径(文件夹或文件),我需要转换的原因很明显,但是编码的 URL 字符串是从应用程序外部在 C++ 中编码的。(数据库、网络、聊天、文件等)所以我需要在 utf8 中对其进行解码,因为我需要出于多语言目的更正该非拉丁部分,然后出于需要的原因使用解码后的 utf8 字符串。

此更新可能有助于非仅针对 wcout 或 cout 转换它,而是针对我真正需要的目标 puprose,但目前还没有任何工作正常。

提前致谢

最佳答案

我会回答我的问题,因为我找到了解决方案,对于其他正在使用 std::string 并希望正确使用 utf8 字符的人来说可能会派上用场。

解决方案是将编码后的url std::string 转换为std::wstring,然后使用任何URLdecoder 对wstring 进行解码。解码后的 wstring 在 php 在线 url 编码和解码中始终是正确的。所以你可以随意使用解码后的wstring。

即使在 Windows 控制台应用程序中,您也可以使用输出Messabox 使用 wstring 查看正确的输出

关于带有utf8字符错误的C++ URL解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43565384/

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