ডিফল্ট এনকোডিং এতে:
- উইন্ডোজ ইউটিএফ -16।
- লিনাক্স ইউটিএফ -8।
- MacOS UTF-8।
এই কোডটির দুটি রূপ রয়েছে যা std :: স্ট্রিংকে std :: wstring এবং std :: wstring এ std :: স্ট্রিংয়ে রূপান্তর করতে পারে। যদি আপনি #IF সংজ্ঞায়িত WIN32 অস্বীকার করেন তবে আপনি একই ফলাফল পাবেন।
1. স্টাড :: স্ট্রিং থেকে স্টাড :: ডাবল স্ট্রিং
• মাল্টিবাইটটওয়েডচার চ্যান উইনাপিআই
• _mbstowcs_s_l
#if defined WIN32
#include <windows.h>
#endif
std::wstring StringToWideString(std::string str)
{
if (str.empty())
{
return std::wstring();
}
size_t len = str.length() + 1;
std::wstring ret = std::wstring(len, 0);
#if defined WIN32
int size = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, &str[0], str.size(), &ret[0], len);
ret.resize(size);
#else
size_t size = 0;
_locale_t lc = _create_locale(LC_ALL, "en_US.UTF-8");
errno_t retval = _mbstowcs_s_l(&size, &ret[0], len, &str[0], _TRUNCATE, lc);
_free_locale(lc);
ret.resize(size - 1);
#endif
return ret;
}
২.এসডিডি :: স্ট্রিং থেকে স্ট্রিং :: স্ট্রিং
। ওয়াইডচারারটোমল্টিবাট উইনাপিআই
• _wcstombs_s_l
std::string WidestringToString(std::wstring wstr)
{
if (wstr.empty())
{
return std::string();
}
#if defined WIN32
int size = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, &wstr[0], wstr.size(), NULL, 0, NULL, NULL);
std::string ret = std::string(size, 0);
WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, &wstr[0], wstr.size(), &ret[0], size, NULL, NULL);
#else
size_t size = 0;
_locale_t lc = _create_locale(LC_ALL, "en_US.UTF-8");
errno_t err = _wcstombs_s_l(&size, NULL, 0, &wstr[0], _TRUNCATE, lc);
std::string ret = std::string(size, 0);
err = _wcstombs_s_l(&size, &ret[0], size, &wstr[0], _TRUNCATE, lc);
_free_locale(lc);
ret.resize(size - 1);
#endif
return ret;
}
৩. উইন্ডোতে আপনার উইনিকপিআই ব্যবহার করে ইউনিকোড প্রিন্ট করতে হবে।
• WritConsole
#if defined _WIN32
void WriteLineUnicode(std::string s)
{
std::wstring unicode = StringToWideString(s);
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), unicode.c_str(), unicode.length(), NULL, NULL);
std::cout << std::endl;
}
void WriteUnicode(std::string s)
{
std::wstring unicode = StringToWideString(s);
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), unicode.c_str(), unicode.length(), NULL, NULL);
}
void WriteLineUnicode(std::wstring ws)
{
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), ws.c_str(), ws.length(), NULL, NULL);
std::cout << std::endl;
}
void WriteUnicode(std::wstring ws)
{
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), ws.c_str(), ws.length(), NULL, NULL);
}
৪. মূল প্রোগ্রামে।
#if defined _WIN32
int wmain(int argc, WCHAR ** args)
#else
int main(int argc, CHAR ** args)
#endif
{
std::string source = u8"ÜüΩωЙ你月曜日\na🐕èéøÞǽлљΣæča🐕🐕";
std::wstring wsource = L"ÜüΩωЙ你月曜日\na🐕èéøÞǽлљΣæča🐕🐕";
WriteLineUnicode(L"@" + StringToWideString(source) + L"@");
WriteLineUnicode("@" + WidestringToString(wsource) + "@");
return EXIT_SUCCESS;
}
৫. অবশেষে কনসোলে ইউনিকোড চরগুলির জন্য আপনার একটি পাওয়ারফুল এবং সম্পূর্ণ সমর্থন প্রয়োজন।
আমি কনেমুর পরামর্শ দিচ্ছি এবং উইন্ডোজে ডিফল্ট টার্মিনাল হিসাবে সেট করব । আপনার ভিজুয়াল স্টুডিওটি কনুমুতে আবদ্ধ করতে হবে। মনে রাখবেন ভিজ্যুয়াল স্টুডিওর এক্সি ফাইলটি devenv.exe e
ভিসি ++ সহ ভিজ্যুয়াল স্টুডিও 2017 এ পরীক্ষিত; এসটিডি = C ++ 17।
ফলাফল