我有一个简单的函数,用于从剪贴板检索文本并将其打印到文件。除非外部字母在剪贴板中,否则它工作正常。例如,字母“ń”将不会被打印出来。这是代码,省略了一些明显的部分:
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;
}
}
我尝试了什么:
TL:DR我有一个获取剪贴板功能,但它不适用于“ń”或“ć”等字符。
编辑:根据建议,我检查了调试器中的变量。事实证明,变量“wstring text”实际上包含特殊字符,例如“N”。问题似乎是写入文件。在编写特殊字符之前是否需要打开一些特殊的文件?以下是我打开文件的方式。
myFile.open(logFullPath, std::ios_base::out | std::ios_base::app);
EDIT2: 我现在100%肯定是问题就在这一行:
//myFile is a wofstream.
myFile << text;
答案 0 :(得分:0)
以下代码是如何处理将unicode字符写入ofstream的上述问题的示例。到目前为止,使用它解决了我的所有问题。
#include <fstream>
#include <codecvt>
int main() {
std::wofstream mystream("test.txt");
mystream.imbue(std::locale(std::locale(),
new std::codecvt_utf8_utf16<wchar_t, 0x10ffff, std::codecvt_mode(std::consume_header|std::generate_header)>));
mystream << "Hello, World!\n";
}