gpt4 book ai didi

windows - UrlUnescape() 和 unicode 字符

转载 作者:可可西里 更新时间:2023-11-01 10:06:55 24 4
gpt4 key购买 nike

我正在尝试在 C++ 上编写程序,该程序将解码包含一些 URL 编码的 unicode 字符的 URL 编码字符串。

#include <windows.h>
#include <string>
#include <shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")

int _tmain(int argc, _TCHAR* argv[])
{
std::wstring test = L"bla+%D0%B1%D0%BB%D0%BE%D1%84+%E6%97%A5%E6%9C%AC%E8%AA%9E";
PWSTR urlencodedStr = const_cast<WCHAR*>(test.c_str());
WCHAR decodedStr[1025];
DWORD size = 1024;
HRESULT hres = UrlUnescape(urlencodedStr, decodedStr, &size, NULL);

if (hres == S_OK)
MessageBox(NULL, decodedStr, L"decoded string", MB_OK);

return 0;
}

我希望在 decodedStr 中得到 L"bla блоф 日本语"。但我得到的是 L"bla+блоф+日本語"。我在构建中使用 unicode 字符集。我做错了什么?

最佳答案

UrlUnescape 默认使用默认 (ANSI) 代码页将 URL 解码的 %xx 字节转换为字符。这几乎不是您想要的。

从 Windows 8 开始,您可以传递 UNESCAPE_AS_UTF8标志使其行为。如果您不能依赖 Win8,则必须使用/编写不会遇到此问题的不同 URL 解码库调用。

还有 + 的问题:在 plain-URL-encoding 中(例如用于路径部分),这意味着加号,但在 form-url-encoding 中(对于example in a query parameter),这是你在这里似乎有的,它意味着一个空格。一个好的 URL 解码器会让你选择说出你的意思; UrlUnescape 没有。另一种方法是在 URL 解码之前用输入的空格手动替换 +;这是一个特例,没有其他字符受到类似的影响。

关于windows - UrlUnescape() 和 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17080078/

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