Q&A

  • 유니코드 <-> 스트링 어떻게 해야 하나요..??
돌아다니다 발견한..볼랜드 씨 소스 입니다...이걸 델파이에서 써야 하는데 도대체 어떻게 해야 할지를 모르고 있습니다..가르쳐 주세요....ㅜ.ㅜ


String __fastcall TMain::StringToUnicode(String stString)
{
int               itWideSize = stString.WideCharBufSize();
wchar_t           *wcSource = new wchar_t[itWideSize];
String            stResult;

wcSource = stString.WideChar(wcSource, itWideSize);

int               itMultiSize = WideCharToMultiByte(CP_UTF8, 0, wcSource, itWideSize, NULL, 0, NULL, NULL);
char              *chTarget = new char[itMultiSize];

WideCharToMultiByte(CP_UTF8, 0, wcSource, itWideSize, chTarget, itMultiSize, NULL, NULL);

stResult = chTarget;

delete [] chTarget;
delete [] wcSource;

return(stResult);

}

//---------------------------------------------------------------------------

String __fastcall TMain::UnicodeToString(String stString)
{

int               itWideSize = MultiByteToWideChar(CP_UTF8, 0, stString.c_str(), stString.Length() + 1, NULL, 0);
wchar_t           *wcTarget = new wchar_t[itWideSize];
String            stResult;

MultiByteToWideChar(CP_UTF8, 0, stString.c_str(), stString.Length() + 1, wcTarget, itWideSize);

stResult = wcTarget;
stResult = StringReplace(stResult.Trim(), "%20", " ");

delete [] wcTarget;

return(stResult);

}
2  COMMENTS
  • Profile
    호현수 2003.03.25 22:05
    유니코드를 스트링으로 바꾸는건 됩니다...아 기쁘다.....ㅜ.ㅜ
    Function TForm1.UnicodeToString(Str : String) : String;
    Var
    wszTemp: array[0..512] of WCHAR;
    tarket: String;
    Begin
    MultiByteToWideChar(CP_UTF8,0,PChar(Str),-1,wszTemp,256);
    tarket := WideCharToString(wszTemp);
    End;

    근데 스트링을 유니코드로 바꾸는건 에러가 나서 안됩니다...

    FunCtion Tform1.StringToUnicode(Str : String) : String;
    Var
    wszTEmp: Array[0..512] OF WCHAR;
    scr:  PCHAR;
    tarket: String;
    Begin

    Tarket := StringToWideChar(STR,wsztemp,256); // 일단 와이드로 바꾸고...

    Scr := PCHAR(Tarket);

    WideCharToMultiByte(CP_ACP,0, wszTemp, -1, Scr, 2, NULL, NULL);
                                                             ~~~~ 요기가
    에러나서 컴파일 안됩니다....머가 문제가 있는건가여..????
    Incompatible types: 'Variant' and 'PChar' <= 에러 메세지...  
    End;

    위에 같이 올렸던 볼랜드 씨 소스를 고대로 베껴도 안되는 이유가 멀까요...ㅜ.ㅜ
    제발 도와 주세여....
    델파이 5 버젼입니다....


  • Profile
    최남선 2003.03.26 19:14
    Incompatible types: 'Variant' and 'PChar'라고 나온 이유는
    System 유닛에서 NULL이 다음과 같이 정의 되어 있어서 그렇습니다.
      Null: Variant;          { Null standard constant }

    문제의 다음 구문을
    WideCharToMultiByte(CP_ACP,0, wszTemp, -1, Scr, 2, NULL, NULL);
    다음과 같이 바꾸면 컴파일 에러는 없습니다.
    WideCharToMultiByte(CP_ACP,0, wszTemp, -1, Scr, 2, nil, nil);
    참고만 하세요...

    그리고 유니코드를 스트링으로 바꾸거나 스트링을 유니코드로 바꾸는거
    를 하실려면 델파이 함수인 WideCharToString와
    StringToWideChar만 쓰셔도 됩니다.
    내부적으로 WideCharToString는 WideCharToMultiByte를
    StringToWideChar는 MultiByteToWideChar를 호출합니다.