2011-06-13 59 views
0

我們使用具有以下簽名的方法來記錄消息。將日誌條目轉換爲UniCode

void CLog::WriteLog(char * lpszBuffer,...) 

示例日誌條目

pLog->WriteLog("Eneterd %s", __ FUNCTION__); 
pLog->WriteLog("Error Code is %d", GetLastError()); 

現在我們有一個具體的要求,在我們的代碼引入Unicode支持。我應該做些什麼修改來輕鬆引入Unicode支持?該代碼有成千上萬的這樣的日誌條目?

或我應該離開日誌條目嗎?

+0

這個新的unicode數據來自哪裏?正如Hans Passant所說,只需將其轉換爲UTF8並記錄下來;除了單個連接點之外,你不需要改變任何東西。 – 2011-06-16 01:17:18

回答

2

指定日誌文件的utf-8格式。好的是,您不必更改一行記錄代碼,ASCII字符集中任何字符的字節值都是相同的。對於任何不使用重音字符的英文文本,您都會很滿意。

然而,這不符合請求的精神,我想。它擊敗了任何機械的方式來驗證源代碼現在正確處理Unicode。與你的主管或項目經理交談。

1

您至少需要更改支持寬字符的方法簽名。例如,

無效堵塞:: WRITELOG(WCHAR * lpszBuffer,...)

這是可能的,當你有機會獲得修改函數體。你將不得不改變printf功能與Unicode支持的功能,即如果你不能訪問該功能的源代碼(如果您使用的庫/ DLL),然後檢查是否其他版本的該功能可用於支持Unicode。您可以嘗試將項目屬性更改爲使用Unicode庫,以便可用函數默認爲unicode函數(如果可用)。