|
^^ 보아하니 메일 발송에 사용하실거군요.
Base64로 디코딩하려구 하시는거죠?
음.. 일단, 질문하신 내용에 대한 답변..
TstirngList에 어떤 값을 대입할 때 \n, \r\n,\ \n\r 은 모두 \r\n으로 바뀝니다.
왜냐하믄.. CRLF코드가 윈도우는 CRLF지만 유닉스는 LFCR이고..
어떤 경우에는 LF코드만 넣는 경우가 있죠. 어쨌건, 이런 것들을 모두 \r\n으로
보정하게되어있습니다.
그런데, 님이 작성하신 코드는 효율적이지는 않군요..
어차피 Full Scan이 들어가야 한다면.. strTest.c_str()값을 얻어서 직접 풀 스캔
하면서 파싱하는게 좋아보입니다. StringReplace함수는 값싼 함수가 아닙니다.
님의 코드는 먼저, StringReplace에서 풀스캔 한번,
TStringList로 전환하면서 FullCopy한번, TStringList에서 내부 리스트 분리과정에
서 또다시 풀 스캔..
다시 조립과정에서 풀카피..
아.. 엄청난 낭비인 것 같습니다.
차라리, Pos함수로 "?B?" 한번 찾아서 잘라내고
그 잘라낸 값에서 "?=" 한번 찾아서 사이 값을 SubString으로 얻어내는것이 안전하고
카피 양도 비교적 적어질 것 같군요.
물론 가장 빠른건 FullScan하면서 시작, 끝점만 Index로 보관했다가 한번에 잘라
내는게 맞겠지만..
어쨌건, EUC_KR인코딩도 위의 방식대로 잘라내면 아무 문제 없이 잘라낼 수 있습니다.
김민우 님이 쓰신 글 :
: strTest = "=?ks_c_5601-1987?B?vsiz58fPvLy/5A==?=";
: AnsiString Org ="";
: Org= strTest;
: String Temp__="";
:
: TStringList *sl = new TStringList;
: sl->Text = StringReplace(Org, "?", "\n", TReplaceFlags()<<rfReplaceAll);
: int sl_count=0;
: sl_count = sl->Count;
: String Find_base[15];
:
: char buf[512];
:
: Decode(sl->Strings[sl_count-2].c_str(),buf);
: Edit2->Text = buf;
: Edit1->Text = sl->Strings[sl_count-3].c_str();
: strTest = buf;
: sl->Free();
:
:
: =========================================================================================
:
: 이게 소스인데요..
: 제가 하려는게 뭐냐하면 원본스트링
: strTest = "=?ks_c_5601-1987?B?vsiz58fPvLy/5A==?=";
: 에서 맨뒤에 물음표 두개 사이의 스트링만 뽑아서 Decode란 함수에 넣으려고 하는거거덩요...
: 즉 "vsiz58fPvLy/5A==" 이것만 뽑아서 함수에 넣으려고 하는건데요...
: 이게 잘 안되네요...
: 일단 문제가 "\n"으로 바꿨더니 "?"가 "\n"으로 바뀌는게 아니구 "\r\n"으로 바뀌더군요...
: 그래서 좀 이상하게 되는거 같은데요...
: 혹시 위 소스에 이상한게 있나요???
: 그리구 char buf[512];에서
: buf[512]를 초기화해주려면 어떻게 해야하는지... -.,-
: 아니면 strTest = "=?ks_c_5601-1987?B?vsiz58fPvLy/5A==?="; 이 원본 스트링에서 vsiz58fPvLy/5A== 만 뽑아내는 다른 방법이 있는지.. 좀 알려주세요...
: 단, strTest 는요.. 항상 저값이 아니구.. 바뀌는데요.. 바뀌더라도 항상 맨 마지막 물음표 두개 사이의 스트링만 뽑아오면 되거든요..
: 좀 알려주세요...
:
:
|