Поддержка UTF-8 в VC ++ для веб-приложения

Я только начал с создания собственных модулей для 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 и т. Д.?

0

Решение

Если вы хотите сделать строковый литерал 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 принять дескриптор файла, который будет использоваться в качестве ответа.

1

Другие решения


По вопросам рекламы [email protected]