프로그래밍/C,C++

Multibyte ↔ UNICODE ↔ UTF8 변환하기

MAKGA 2021. 10. 15. 22:40
320x100

WideCharToMultiByte 함수 사용을 위해 stringapiset.h 헤더 파일을

lstrlenW 함수 사용을 위해 winbase.h 헤더 파일을 include하고 사용해야 한다.

 

아래 코드는 예외처리 없이 필요한 코드만 적었으므로 알아서 수정해야 한다. (out 크기가 len보다 작으면 문제)

 

#include <stringapiset.h>
#include <winbase.h>

int Utility::UnicodeToMultibyte(const wchar_t* in, char* out)
{
	if (!in || !out)
		return 0;

	int len = WideCharToMultiByte(CP_ACP, 0, in, -1, NULL, 0, NULL, NULL);
	return WideCharToMultiByte(CP_ACP, 0, in, -1, out, len, NULL, NULL);
}

int Utility::MultibyteToUnicode(const char* in, wchar_t* out)
{
	if (!in || !out)
		return 0;

	int len = MultiByteToWideChar(CP_ACP, 0, in, -1, NULL, 0);
	return MultiByteToWideChar(CP_ACP, 0, in, -1, out, len);
}

int Utility::UnicodeToUTF8(const wchar_t* in, char* out)
{
	if (!in || !out)
		return 0;

	int len = WideCharToMultiByte(CP_UTF8, 0, in, lstrlenW(in), NULL, 0, NULL, NULL);
	return WideCharToMultiByte(CP_UTF8, 0, in, lstrlenW(in), out, len, NULL, NULL);
}

int Utility::UTF8ToUnicode(const char* in, wchar_t* out)
{
	if (!in || !out)
		return 0;

	int len = MultiByteToWideChar(CP_UTF8, 0, in, strlen(in), NULL, NULL);
	return MultiByteToWideChar(CP_UTF8, 0, in, strlen(in), out, len);
}

 

320x100

'프로그래밍 > C,C++' 카테고리의 다른 글

set_new_handler  (0) 2021.10.26
c++ Infographics & Cheat Sheets  (0) 2021.10.18
inet_pton(), inet_ntop()  (0) 2021.10.09
enum 크기  (0) 2021.10.06
자주 사용하는 함수  (0) 2021.07.30