Я только начал с создания собственных модулей для IIS7. Я использую один из примеров Hello World из 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 без спецификации. Тогда вы можете использовать обычный строковый литерал как UTF-8. использование WideCharToMultiByte
а также MultiByteToWideChar
конвертировать между строкой UTF-16 и UTF-8.
Если в вашем проекте используется ATL, вы можете использовать макросы преобразования строк, которые предоставляет ATL, для простого преобразования между UTF-16 и UTF-8; увидеть http://msdn.microsoft.com/en-us/library/87zae4a3.aspx как это использовать.
Если вам нужно количество байтов в строке, используйте strlen
на строку UTF-8.
Другой способ написать ответ — использовать HTTP_DATA_CHUNK::FromFileHandle
вместо HTTP_DATA_CHUNK::FromMemory
, HTTP_DATA_CHUNK::FromFileHandle
принять дескриптор файла, который будет использоваться в качестве ответа.