1
我有一個簡單的函數,用於從剪貼板中檢索文本並將其打印到文件。它工作正常,除非外國的信件在剪貼板中。例如字母「ñ」不會被打印出來。下面是一些明顯的部分代碼省略:C++獲取剪貼板 - 特殊字符
HANDLE hData = GetClipboardData(CF_UNICODETEXT);
if (hData != NULL)
{
wchar_t * pszText = static_cast<wchar_t*>(GlobalLock(hData));
if (pszText != NULL)
{
std::wstring text(pszText);
// Release the lock
GlobalUnlock(hData);
// Release the clipboard
CloseClipboard();
//myFile is a wofstream.
myFile << text;
}
}
我試了一下:
- 我用「wcout」,以及標準「COUT」打印出變量「文本」和「pszText」 。在這兩種情況下,特殊信件都沒有打印出來。
- 嘗試將CF_UNICODETEXT更改爲CF_TEXT並得到相同的結果。
TL:DR我有一個獲取剪貼板功能,但它不與人物的工作就像「N」或「C」。
編輯:至於建議,我在調試器中檢查變量。事實證明,變量「wstring text」實際上包含特殊字符,例如「N」。問題似乎是寫入文件。在可以編寫特殊字符之前是否需要打開一些特殊方式的文件?以下是我如何打開文件。
myFile.open(logFullPath, std::ios_base::out | std::ios_base::app);
EDIT2: 林100%陽性,現在的問題是這樣的線:
//myFile is a wofstream.
myFile << text;
你看過調試器中的字符嗎?或者,嘗試轉儲收到的字符的代碼點。窗口控制檯非常好地處理非ASCII字符集,因此很輕鬆。 – rodrigo
與您的問題無關,但您是不是在錯誤的範圍內調用'CloseClipboard'?如果您無法獲取剪貼板數據,那麼當您不關閉剪貼板時,將會發生資源泄漏。 –
@JoachimPileborg我沒有複製整個源代碼。您所描述的問題在我的完整版本中不存在。 – SzloseProgramming