Q&A

  • TIdUDPServer를 사용함에 있어서...(한글깨짐)
제가 아래와 같이 UDP서버를 만들어 사용하고 있는데...
문제는 깨진한글이 존재할때 자료를 있는 그대로 받지(?) 못한다는 것입니다.

procedure TfrmMain.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
  var
    LMsg : String;
begin
  SetLength(LMsg, AData.Size);
  AData.ReadBuffer(LMsg[1], Length(LMsg));
...
end;

아래 자료중 아래것이 정상이고 위에것이 깨진한글을 포함하고 있는것입니다.
    112고이히메(습譴??       311개     1   152,000     1  낙찰
    111공통체리부김영순       1011개     2       750    22  낙찰

VB에서는 winsock()을 사용하여 자료를 받아,
Len()를 사용하여 확인해 본 결과 둘다 똑같은 값을 돌려주지만,
위 소스의 AData.Size를 참조해보면 값이 2바이트 차이가 남니다.
각 항목을 고정된 길이로 잘라 DB의 값과 비교를 하는데...
바이트가 다르니, 항목를 나누는것에도 문제가 발생하고, 당연하겠지만,
DB자료와 비교도 되지를 않습니다.ㅠㅠ.
어떻게 해결해야 될까요????
참고로, 깨어진 부분은 품명(10)+이름(6)으로 된 부분입니다.
품명이 10byte로 무조건 쪼개어져 전달되므로 발생하는 현상입니다.

품명[10] := ' '를 임으로 주면, 이름(6)의 첫자는 파악이 되지만,
뒤는 ??로 되네요...ㅠㅠ.

고수님들의 답변을 기다랍니다.
1  COMMENTS
  • Profile
    최용일 2004.05.19 21:06
    안녕하세요. 최용일입니다.

    제가 생각하기에는 보낼때부터 깨져서 보내는것 같습니다.

    DB에 저장된 문자열이 Unicode같은데... 그걸 AnsiCode로 읽어서 보내고 받을때도 AnsiCode로 작업을 해서 그런거 같습니다.

    string형 대신에 유니코드를 지원하는 WideString형을 써보세요...

    ^^ 항상 즐코하세요...