제가 아래와 같이 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)의 첫자는 파악이 되지만,
뒤는 ??로 되네요...ㅠㅠ.
고수님들의 답변을 기다랍니다.
제가 생각하기에는 보낼때부터 깨져서 보내는것 같습니다.
DB에 저장된 문자열이 Unicode같은데... 그걸 AnsiCode로 읽어서 보내고 받을때도 AnsiCode로 작업을 해서 그런거 같습니다.
string형 대신에 유니코드를 지원하는 WideString형을 써보세요...
^^ 항상 즐코하세요...