获取剪贴板-特殊字符
C++ Get Clipboard - special characters
我有一个简单的函数,用于从剪贴板检索文本并将其打印到文件中。它工作得很好,除非在剪贴板上有外文字母。例如,字母"ski"不会被打印出来。下面是省略了一些明显部分的代码:
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;
}
}
What I tried:
- 我使用"wcout"以及标准的"cout"来打印变量"text"answers"pszText"。在这两种情况下,特殊的字母都没有打印出来。
- 尝试将CF_UNICODETEXT更改为CF_TEXT,结果相同。
TL:DR我有一个获取剪贴板功能,但它不工作与字符,如"ski"或"ki"。
Edit:按照建议,我检查了调试器中的变量。事实证明,变量"wstring text"实际上包含特殊字符,例如:"ń"。问题似乎是写文件。在写入特殊字符之前,是否需要以某种特殊的方式打开文件?下面是我打开文件的方法:
myFile.open(logFullPath, std::ios_base::out | std::ios_base::app);
Edit2: 我现在百分之百肯定问题出在这一行:
//myFile is a wofstream.
myFile << text;
下面的代码是如何处理将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";
}
相关文章:
- 如何用转义符替换字符串中的所有特殊字符
- 转换特殊字符(UTF-8)
- C++剪贴板队列粘贴随机结果?
- 将缓冲区复制到剪贴板 [换行错误]
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- 如何在C++中打印此"█"特殊字符?
- wxWidgets mac剪贴板在3.1.3上坏了?
- c++为什么ifstream get()函数返回无法识别的特殊字符
- 如何检查字符串是否包含所有这些:数字、字母和特殊字符
- 转义std::字符串中的特殊字符
- SDL2加载具有特殊字符的文件
- 将 std::string 转换为具有特殊字符的 FString (TCHAR / wstring)
- 获取剪贴板数据(CF_HDROP)在剪切和粘贴中失败
- 如何从文本文件C++读取整数和特殊字符
- USB序列号显示特殊字符
- 键入特殊字符并保存在文件中
- 在 UWP 中找不到剪贴板
- 回文,不包括特殊字符和空格
- 如何将字符数组复制到剪贴板
- 获取剪贴板-特殊字符