2010년 1월 19일 화요일

ANSI TO UTF-8 and UTF-8 to ANISI

int ANSIToUTF8(char *pszCode, char *UTF8code)
{
  WCHAR Unicode[100]={0,};
  char utf8[100]={0,};
  // char Lenth 읽어 오기
  int nUnicodeSize = MultiByteToWideChar(CP_ACP, 0, pszCode, strlen(pszCode), Unicode, sizeof(Unicode));
  // UTF-8 Lenth 읽어 오기
  int nUTF8codeSize = WideCharToMultiByte(CP_UTF8, 0, Unicode, nUnicodeSize, UTF8code, sizeof(Unicode), NULL, NULL);
  // UTF-8 변환
  MultiByteToWideChar(CP_UTF8, 0, utf8, nUTF8codeSize, Unicode, sizeof(Unicode));
  return nUTF8codeSize;
}

char* UTF8ToANSI(char *pszCode)
{
    BSTR    bstrWide;
    char*   pszAnsi;
    int     nLength;


    // bstrWide 배열 생성 Lenth를 읽어 온다.
    nLength = MultiByteToWideChar(CP_UTF8, 0, pszCode, lstrlen(pszCode) + 1, NULL, NULL);

    // bstrWide 메모리 설정

    bstrWide = SysAllocStringLen(NULL, nLength);

    MultiByteToWideChar(CP_UTF8, 0, pszCode, lstrlen(pszCode) + 1, bstrWide, nLength);


    // char 배열 생성전 Lenth를 읽어 온다.
    nLength = WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, NULL, 0, NULL, NULL);

    // pszAnsi 배열 생성
    pszAnsi = new char[nLength];

    // char 변환
    WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, pszAnsi, nLength, NULL, NULL);


    // bstrWide 메모리 해제
    SysFreeString(bstrWide);

    return pszAnsi;
}

댓글 없음:

댓글 쓰기