VC++ 寫 UTF-8 HTML

為了在 HTML 中正確顯示中文,我們會使用 UTF-8 的編碼。然而在 VC++ 中,我們不能直接將 WCHAR 字串寫到檔案,因為它的格式是 Little-endian UTF-16(UTF16-LE)。不知怎的,在 firefox 中可以正常判別編碼,但在 chrome 一直判別錯,顯示不出來。

其實正確的作法是使用 WCHAR 字串沒錯,但是要先透過 WideCharToMultiByte 函式帶入第一個參數為 CP_UTF8 來轉換成 UTF-8 的字串(使用 char 字串來存)。最後將這個 char 字串寫入檔案即可。

以下是轉換的程式碼:


static BOOL ConvertWcharToUTF8( WCHAR *pInStr, char *pOutStr, DWORD dwSize )
{
 // Get the required size of the buffer that receives the Unicode string. 
 DWORD dwMinSize = WideCharToMultiByte(CP_UTF8, 0, pInStr, dwSize, NULL, 0, NULL, NULL);

 if (dwMinSize == 0)
  return FALSE;

 WideCharToMultiByte(CP_UTF8, 0, pInStr, dwSize, pOutStr, dwMinSize, NULL, NULL);
 return TRUE;
}

在網頁上也不要忘記加入 meta 來告訴瀏覽器網頁編碼喔!

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">


留言

熱門文章