|
문자열을 utf-8 인코딩해서 넘겨보면 어떨까요?
넘초보 님이 쓰신 글 :
: TWebBrowser 에 동적으로 할당된 유니코드 문자열을 보여주려 합니다.
:
: 검색결과 아래 두가지 방법으로 정상 동작 합니다만..... [ǝnd, ǝn] 와 같은 유니코드가 깨져(물음표로) 보이네요.
:
: 어찌 풀어야 할까요? 도움 기다립니다.
:
: AnsiString HTML = ㅣ"★ ⑴ 100자리 다음에 and [ǝnd, ǝn]가 옴. 그러나 美에서는 종종 생략. ⑵ 100의 자리가 0일 때는 1,000자리 다음에 and가 옴.";
:
: // 1번째 방법
: WebBrowser1->Navigate(L"about:blank");
: while(WebBrowser1->Busy) Application->ProcessMessages();
: TMemoryStream* mstm = new TMemoryStream();
: mstm->Write(HTML.c_str(), HTML.Length());
: mstm->Seek(0, soFromBeginning);
: IPersistStreamInit* pPersistStreamInit = NULL;
: TStreamAdapter *IStr = new TStreamAdapter(mstm, soReference);
: WebBrowser1->Document->QueryInterface(IID_IPersistStreamInit, (void**)&pPersistStreamInit);
: pPersistStreamInit->Load(*IStr);
: pPersistStreamInit->Release();
: pPersistStreamInit = NULL;
: delete mstm;
:
: // 2번째 방법
: WebBrowser1->Navigate(L"about:blank");
: while(WebBrowser1->ReadyState != Shdocvw::READYSTATE_COMPLETE) Application->ProcessMessages();
:
: HANDLE hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_NODISCARD, HTML.Length());
: if(!hMem ) return;
:
: void *ptr = GlobalLock(hMem);
: memcpy(ptr, HTML.c_str(), HTML.Length());
:
: GlobalUnlock(hMem);
: TComInterface<IStream> pStream;
: if( FAILED(CreateStreamOnHGlobal(hMem, TRUE, &pStream))){
: GlobalFree(hMem);
: return ;
: }
:
: TComInterface<IPersistStreamInit> pPersistStreamInit;
: if(FAILED(WebBrowser1->Document->QueryInterface(IID_IPersistStreamInit, (void**)&pPersistStreamInit))) return;
:
: SUCCEEDED(pPersistStreamInit->Load(pStream));
|