유니 코드 문자열로 작업 할 수있는 프로그램을 만들고 결국에는이를 Windows 클립 보드에 복사 할 수 있습니다.
저는 간단한 cout
테스트 프로그램으로 시작했습니다 .
#include <iostream>
int main()
{
std::cout << "( ͡° ͜ʖ ͡°)\n";
return 0;
}
불행히도 유니 코드를 처리하지 않고 대신 다음을 반환했습니다.
( ͡° ͜ʖ ͡°)
코드 파일이 유니 코드 문자로 저장되지 않는다는 느낌이 들었 기 때문에 여기 에서 이스케이프 시퀀스로 표현하기로 결정했습니다 .
#include <iostream>
using namespace std;
int main()
{
std::cout << "( \u0361\u00b0 \u035c\u0296 \u0361\u00b0)\n";
return 0;
}
불행히도 프로그램은 이전과 동일한 결과를 반환했습니다.
내 최종 목표는 유니 코드 문자열을 Windows 클립 보드에 복사 할 수있는 프로그램을 만드는 것이므로 다른 데이터 유형 string
이 필요한 경우 문자열 시작 부분에 데이터 / 서명을 추가하는 것만 큼 간단하지 않습니다. 유니 코드임을 나타내면이 클립 보드 작성 코드를 유니 코드를 지원하도록 조정할 수 있는지 확실하지 않습니다.
#include <string>
#include <windows.h>
void clip(std::string input);
int main()
{
clip("( ͡° ͜ʖ ͡°)");
return 0;
}
void clip(std::string input)
{
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, strlen(input.c_str()) + 1);
memcpy(GlobalLock(hMem), input.c_str(), strlen(input.c_str()) + 1);
GlobalUnlock(hMem);
OpenClipboard(0);
EmptyClipboard();
SetClipboardData(CF_TEXT, hMem);
CloseClipboard();
}
메모:
conhost.exe
(Windows 콘솔) 문제의 유니 코드 문자열을 처리 할 수 있습니다.사용 CF_UNICODETEXT
뿐만 아니라 CF_TEXT
. 또한 L
접두사로 유니 코드 문자열을 선언해야 합니다 (예 : L""
.
#include <Windows.h>
#include <cstring>
#include <string>
int main() {
std::wstring str(L"( ͡° ͜ʖ ͡°)");
if (OpenClipboard(HWND_DESKTOP)) {
EmptyClipboard();
auto sz = (str.size() + 1) * sizeof(str[0]);
auto hMem = GlobalAlloc(GMEM_MOVEABLE, sz);
if (hMem != nullptr) {
auto pMem = GlobalLock(hMem);
memcpy(pMem, str.c_str(), sz);
GlobalUnlock(hMem);
SetClipboardData(CF_UNICODETEXT, hMem);
}
else {
fprintf(stderr, "Can't allocate memory");
}
CloseClipboard();
}
else {
fprintf(stderr, "Can't open clipboard");
}
return 0;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다