자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi UTF-32 변환 문제 입니다.
2021.03.24 09:17
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
기초가 안되어 있어서 항상 이런게 어렵습니다ㅠ
Unicode 와 관련한걸 찾아봐도 도데체 적용을 못하고 있습니다 ㅠ
TServersocket 을 사용해서 장비와 ASTM 통신을 하는데,
UTF-32(12000) 형식으로 통신으로 해야합니다. 장비설정상.
데이터를 받아보니 (첫신호)
ENQ 신호( #5)
procedure TF_Main.SERVERClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
s:string;
begin
s:= String(Socket.ReceiveText);
SaveLog(s);
end;
에티터로 보면 #5#0#0#0 으로 되어 있습니다.
제쪽에서 ACK 신호(#6) 을 보내야 하는데,
변환을 할지 몰라서 강제로 #6#0#0#0 을 보내면 응답이 없습니다.
if TMyClienSockt.Connected = True then begin
TMyClienSockt.SendText(#6#0#0#0);
그럼 타임아웃이 나면서 EOT 신호가 나옵니다.
이번엔 파일로 보면 #0#0#0#4 로 나옵니다.
전체적으로 보면
AnsiString(Socket.ReceiveText) 으로 받아서 String으로 변환해서 처리하고,
String -> UTF-32 변환후 - AnsiString 으로 변환해서 보내줘야 하는데,
이게 너무 어렵습니다.
UCS4StringToWideString, ConvertFromUtf32 이런것들이 찾아지긴 하는것 같은데,
어떻게 적용시켜야 할지를 모르겠습니다.
고수님들 방법좀 알려주십시요..
Delphi UTF-32 변환 문제 입니다.
2021.03.24 09:17
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
기초가 안되어 있어서 항상 이런게 어렵습니다ㅠ
Unicode 와 관련한걸 찾아봐도 도데체 적용을 못하고 있습니다 ㅠ
TServersocket 을 사용해서 장비와 ASTM 통신을 하는데,
UTF-32(12000) 형식으로 통신으로 해야합니다. 장비설정상.
데이터를 받아보니 (첫신호)
ENQ 신호( #5)
procedure TF_Main.SERVERClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
s:string;
begin
s:= String(Socket.ReceiveText);
SaveLog(s);
end;
에티터로 보면 #5#0#0#0 으로 되어 있습니다.
제쪽에서 ACK 신호(#6) 을 보내야 하는데,
변환을 할지 몰라서 강제로 #6#0#0#0 을 보내면 응답이 없습니다.
if TMyClienSockt.Connected = True then begin
TMyClienSockt.SendText(#6#0#0#0);
그럼 타임아웃이 나면서 EOT 신호가 나옵니다.
이번엔 파일로 보면 #0#0#0#4 로 나옵니다.
전체적으로 보면
AnsiString(Socket.ReceiveText) 으로 받아서 String으로 변환해서 처리하고,
String -> UTF-32 변환후 - AnsiString 으로 변환해서 보내줘야 하는데,
이게 너무 어렵습니다.
UCS4StringToWideString, ConvertFromUtf32 이런것들이 찾아지긴 하는것 같은데,
어떻게 적용시켜야 할지를 모르겠습니다.
고수님들 방법좀 알려주십시요..
아래 링크들은 보시면 유니코드에 관한 자료들입니다. 참조하시기 바랍니다.
https://www.danysoft.com/estaticos/free/delphi-unicode-migration.pdf
https://www.embarcadero.com/images/dm/technical-papers/delphi-and-unicode-marco-cantu.pdf
https://pythonq.com/so/delphi/565353
http://docwiki.embarcadero.com/CodeExamples/Sydney/en/AdvancedCharacterControl_(Delphi)
ConvertFromUtf32는 UCS4Char를 해당 UTF-16 문자 또는 서로 게이트 쌍으로 변환합니다. 얻은 결과는 문자열로 반환됩니다.
예:
#9 + ConvertFromUtf32 (128) +
ConvertFromUtf32($1D11E);
showmessage(str1);