2014-04-19 83 views
0

我剛剛開始爲IIS7創建本地模塊。我正在使用來自http://msdn.microsoft.com/en-us/library/ms689348(v=vs.90).aspx的Hello World示例之一。寫在那裏的示例代碼工作正常。現在我正在嘗試更改此代碼以支持在瀏覽器中顯示的UTF-8編碼。我做了如下修改:UTF-8支持VC++的Web應用程序

//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

您可以使用庫使用Unicode工作,如http://utfcpp.sourceforge.net/(!只是避免MBCS)還要檢查MSDN:http://msdn.microsoft.com/en-us/library/ cwe8bzh0.aspx – Dai

回答

1

如果你想字符串文字是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接受要用作響應的文件句柄。

相關問題