작업을 하면서 몇가지 정리하고 넘어가야 할 사안이 있어 정리합니다.
우선 화면상에 한글을 정상적으로 표현하기 위하여는
PageProdecer에 html을 불러올 경우에는 utf-8 형식으로 저장하여야 합니다.(XE2 기준)
또한 아래와 같이 Response.ContentType 을 지정하여야 합니다.
procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.ContentType:= 'text/html; charset=utf-8';
Response.Content := PageProducer1.Content;
end;
Form 에서 데이터를 Query 하는 방법에는 Post 와 Get 이 있는데
Get은 Url 상에 Query 내용이 보이는 것이고,
( http://localhost:8080/test?param=%ED%95%9C%EA%B8%80&hidden=hidden+%EB%AC%B8%EC%9E%90&submit=UTF-8+%ED%95%9C%EA%B8%80+%EC%9D%B4%EC%A0%95%EA%B7%80 )
Post는 Url 상에 Query 내용이 보이지 않는다는 점을 제외하고는 큰 의미는 없습니다.
( http://localhost:8080/test )
단, Get은 Get 이고 Post는 Post입니다. 가져오고, 뭔가를 보내고의 의미차이겠지요.
Query 를 읽어오는 방법에는
Request.ContentFields.Values['name'] 과
Request.QueryFields.Values['hidden'] 방법이 있는데,
Help 상에는 ContentFiels 는 mtPost에서 사용하는 것 처럼 되어 있고
QueryFields.Values 은 Hidden 필드를 읽어오는 것 처럼 되어 있어 이게 mtGet에서 작동되는 것처럼 곡해되고 있는 것 같습니다.
Request.ContentFields.Values['name'] 으로 모두 읽어 올 수 있습니다.
그리고 가장 중요한 것은!!!!!!!!!!!!!!
이렇게 읽어온 UTF-8 문자가 일부 깨어진다는 점입니다.
이것을 해결하기위하여 거의 하루를 삽집하였습니다.
결론은 항상그러하듯이 너무 허망하네요..
Progect에 아래와 같이 utf8ContentParser 를 포함만 시켜주면 됩니다.
program Project2;
{$APPTYPE GUI}
uses
Vcl.Forms,
Web.WebReq,
IdHTTPWebBrokerBridge,
utf8ContentParser,
FormUnit1 in 'FormUnit1.pas' {Form1},
WebModuleUnit1 in 'WebModuleUnit1.pas' {WebModule1: TWebModule};
이렇게 할경우 Get 에서는 Hidden 필드의 한글이 깨어 지네요.
역시나 Hidden 필드는 QueryFields.Values['hidden']으로 읽어와야 깨어지지 않습니다.
댓글 없음:
댓글 쓰기