UTF-8在VC++中支持web应用程序

UTF-8 Support in VC++ for web application

本文关键字:web 应用程序 支持 VC++ UTF-8      更新时间:2023-10-16

我刚刚开始为IIS7创建本机模块。我使用的是来自http://msdn.microsoft.com/en-us/library/ms689348(v=vs.90).aspx。在那里编写的示例代码运行良好。现在我正在尝试更改此代码,以支持在浏览器中显示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上的代码)?

还有没有其他方法可以写入响应,而不是创建缓冲区、chunck等。?

如果您想将字符串文字设置为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接受要用作响应的文件句柄。

相关文章: