[Delphi] WinHTTP.ResponseText 한글 깨질때
예전에 한글 깨져서 코딩하다가만 프로젝트를 다시 살렸다. 그 땐 3일이나 삽질했었는데 후..
자꾸 깨지길래 치트엔진으로 메모리를 보니 EB 00 ?? 00 ?? EC 00 ?? 00 ?? 00 이렇게 WideString으로 되어있었다.
EB????EC????인데.. IdHttp를 써보고 UTF8Encode/Decode MultiByte<>WideChar 함수 여러개를 써봐도 안됐다 ㅠㅠ
우연히 네이버 검색 url에 %E?%??%??을 보고 URL 디코딩을 하니 출력이 잘됬다.
너무 기쁜마음에 바로 함수를 짰다.
uses 에 IdURL 라이브러리를 추가하고 사용하자.
Function HttpEncode(ResponseText : String) : String;
var
i,Len :integer;
ps :PAnsiChar;
s :String;
begin
ps := PAnsiChar(ResponseText);
Len := Length(ResponseText);
for i := 0 to Len do begin
s := s + '%';
s := s + IntToHex(PWORD(@ps[i*2])^,2);
end;
Result := String(TIdURI.URLDecode(s));
end
var
WinHttp :IWinHttpRequest;
begin
WinHttp := coWinHttpRequest.Create;
WinHttp.Open('GET','http://www.naver.com',False);
WinHttp.Send('');
WinHttp.WaitForResponse('');
sRecv := HttpEncode(WinHttp.ResponseText);
잘 출력된다.