gpt4 book ai didi

c++ - VC++ 对 Web 应用程序的 UTF-8 支持

转载 作者:行者123 更新时间:2023-11-28 06:56:01 24 4
gpt4 key购买 nike

我刚刚开始为 IIS7 创建 native 模块。我正在使用来自 http://msdn.microsoft.com/en-us/library/ms689348(v=vs.90).aspx 的 Hello World 示例之一.在那里编写的示例代码工作正常。现在我正在尝试更改此代码以支持在浏览器中显示的 UTF-8 编码。我做了以下更改:

//1. Changed here to include ;charset=UTF-8 in Http Header Content Type
pHttpResponse->SetHeader(HttpHeaderContentType, "text/plain;charset=UTF-8", (USHORT)strlen("text/plain;charset=UTF-8"), TRUE);
//2. Changed here data type as PCTSTR which is PCWSTR(16-bit) since I have UNICODE defined.
PCTSTR pszBuffer = L"Hello World!";
HTTP_DATA_CHUNK dataChunk;
dataChunk.DataChunkType = HttpDataChunkFromMemory;
DWORD cbSent;
dataChunk.FromMemory.pBuffer = (PVOID)pszBuffer;
//3. Changed here to calculate length using wcslen.
dataChunk.FromMemory.BufferLength = (USHORT)wcslen(pszBuffer);
hr = pHttpResponse->WriteEntityChunks(&dataChunk, 1, FALSE, TRUE, &cbSent);

我的第一个疑问是如何制作 pszBuffer UTF-8 字符串?

第二个疑问是如何正确计算它的长度(代码在评论编号 3 上)?

还有什么替代方法可以写入响应而不是创建缓冲区、 block 等?

最佳答案

如果要使字符串文字为UTF-8,请将源文件的编码设置为UTF-8 无BOM。然后您可以使用普通字符串文字作为 UTF-8。使用 WideCharToMultiByteMultiByteToWideChar 在 UTF-16 和 UTF-8 字符串之间进行转换。

如果你的项目使用ATL,你可以使用ATL提供的字符串转换宏,方便地在UTF-16和UTF-8之间进行转换;见http://msdn.microsoft.com/en-us/library/87zae4a3.aspx了解如何使用它。

如果您需要字符串中的字节数,请在 UTF-8 字符串上使用 strlen

另一种写入响应的方法是使用 HTTP_DATA_CHUNK::FromFileHandle 而不是 HTTP_DATA_CHUNK::FromMemoryHTTP_DATA_CHUNK::FromFileHandle 接受一个文件句柄作为响应。

关于c++ - VC++ 对 Web 应用程序的 UTF-8 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23166832/

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