검색결과 리스트
-- VC++에 해당되는 글 48건
- 2006.11.30 ANSI문자열을 유니코드 및 UTF-8로 변환
글
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
어느분이 답변을 달았던 글인데 출처를 알 수가 없네요.
일단 중요한 정보라 올립니다.
-----------------------------------------------------------------------
일단 중요한 정보라 올립니다.
-----------------------------------------------------------------------
#include <Windows.h>
#include <stdlib.h>
#include <math.h>
///ANSI 문자열에서 유니코드로 변환
LPWSTR AnsiToUnicode(LPSTR szAnsi)
{
LPWSTR szUniStr;
// 유니코드로 변환 전 return 되는 길이얻기
int nLen = MultiByteToWideChar(CP_ACP, 0, szAnsi, -1, NULL, NULL);
nLen = nLen * sizeof(WCHAR);
szUniStr = (LPWSTR)malloc(nLen+1);// 메모리를 할당한다.
memset(szUniStr,0,nLen+1);
// 이제 변환을 수행한다.
MultiByteToWideChar(CP_ACP, 0, szAnsi, -1, szUniStr, nLen);
return szUniStr;
}
//유니코드에서 ANSI 문자열로 변환
LPSTR UnicodeToAnsi(LPWSTR szUniStr)
{
LPSTR szAnsi;
int nLen = WideCharToMultiByte(CP_ACP, 0, szUniStr, -1, NULL, 0, NULL, NULL);
szAnsi = (LPSTR) malloc(nLen+1);
memset(szAnsi,0,nLen+1);
WideCharToMultiByte(CP_ACP, 0, szUniStr, -1, szAnsi, nLen, NULL, NULL);
return szAnsi;
}
//유니코드에서 UTF8 문자열로 변환
LPWSTR UnicodeToUTF8(LPWSTR szUniStr)
{
int idx=0;
WCHAR uc;
LPWSTR szUtf8;
int nLen = sizeof(WCHAR) * wcslen(szUniStr);
nLen = nLen*3+sizeof(WCHAR); //최대 값
szUtf8 = (LPWSTR) malloc(nLen);
memset(szUtf8,0,nLen);
LPSTR pszUTF8 = (LPSTR)szUtf8;
for(int i=0;szUniStr[i];i++)
{
uc = szUniStr[i];
if (uc <= 0x7f)
{
pszUTF8[idx++] = (char) uc;
}
else if (uc <= 0x7ff)
{
pszUTF8[idx++] = (char) 0xc0 + uc / (wchar_t) pow(2, 6);
pszUTF8[idx++] = (char) 0x80 + uc % (wchar_t) pow(2, 6);
}
else if (uc <= 0xffff)
{
pszUTF8[idx++] = (char) 0xe0 + uc / (wchar_t) pow(2, 12);
pszUTF8[idx++] = (char) 0x80 + uc / (wchar_t) pow(2, 6) % (wchar_t) pow(2, 6);
pszUTF8[idx++] = (char) 0x80 + uc % (wchar_t) pow(2, 6);
}
}
return szUtf8;
/** Win95에서만 안되는 코드
http://support.microsoft.com/default.aspx?scid=kb%3Bko%3B601368
LPWSTR szUtf8;
int nLen = WideCharToMultiByte(CP_UTF8, 0, szUniStr, -1, NULL, 0, NULL, NULL);
szUtf8 = (LPWSTR) malloc(nLen+1);
memset(szUtf8,0,nLen+1);
WideCharToMultiByte(CP_UTF8, 0, szUniStr, -1, (LPSTR)szUtf8, nLen, NULL, NULL);
return szUtf8;
**/
}
//유니코드에서 UTF8 문자열로 변환
LPWSTR UTF8ToUnicode(LPWSTR szUtf8)
{
LPWSTR szUniStr;
int nLen = sizeof(WCHAR) * wcslen(szUtf8);
nLen = nLen+sizeof(WCHAR);
szUniStr = (LPWSTR) malloc(nLen);
memset(szUniStr,0,nLen);
LPSTR src = (LPSTR)szUtf8;
int p = 0;
int q = 0;
WCHAR d;
while( src[p] )
{
if( (src[p]&0xE0)==0xE0 )
{
d = ((src[p]&0x0f)<<12) | ((src[p+1]&0x3F)<<6) | (src[p+2]&0x3F);
p+=3;
}
else if( (src[p]&0xC0)==0xC0 )
{
d = ((src[p]&0x1F)<<6) | (src[p+1]&0x3F);
p+=2;
}
else
{
d = src[p]&0x7F;
p++;
}
szUniStr[q] = d;
q++;
}
szUniStr[q] = NULL;
return szUniStr;
}
int main()
{
LPSTR s="한글";
LPWSTR szUniStr = AnsiToUnicode(s);
LPWSTR szUtf8 = UnicodeToUTF8(szUniStr);
LPWSTR szUniStr2 = UTF8ToUnicode(szUtf8);
LPSTR szAnsi = UnicodeToAnsi(szUniStr);
free(szUniStr);
free(szUtf8);
free(szUniStr2);
free(szAnsi);
return 0;
}
'-- VC++' 카테고리의 다른 글
Downloaded Program Files 에 설치된 OCX 제거 (0) | 2008.02.12 |
---|---|
한글과 UNICODE (0) | 2007.01.22 |
How to Display UNICODE in a CListCtrl or a CEdit (0) | 2007.01.19 |
Using Unicode in INI files (0) | 2007.01.10 |
CString Management (0) | 2007.01.10 |
RECENT COMMENT