pc에서 스마트폰으로 at 명령어를 이용해 문자를 보낼 때 인코딩 문제
글쓴이: bhb0047 / 작성시간: 수, 2019/05/22 - 5:34오후
포트 설정하는 부분에서
sp.Encoding = Encoding.UTF8;
를 하고
sp.WriteLine("AT+CMGF=1" + Environment.NewLine); sp.WriteLine("AT+CMGW=*휴대폰번호*" + Environment.NewLine); sp.WriteLine("Hellowwwww안녕하세요" + Environment.NewLine); SendKeys.Send("^(z)" );
이렇게 써서 스마트폰 스토리지에 저장했어요
근데 임시 저장된 메시지에는 한글이 나오지 않더군요
utf7, utf32, unicode로 인코딩해서 출력하면
HellowwwwHUX8이라고 문자가 저장이 됩니다
제대로 한글로 출력하고 싶은데 어떻게 해야할지 모르겠습니다
Forums:
어떤 언어로 프로그래밍하신 건가요?
어떤 언어로 프로그래밍하신 건가요?
그리고 저 방식으로 한글을 보내려면 UCS-2로 인코딩된 값을 전달해야 합니다.
https://alt.cellular.gsm.narkive.com/BxjyGXT7/send-sms-in-arabic-using-gsm-modem
C#입니다..!
C#.NET에서 지원하지 않는 방식이라
https://stackoverflow.com/questions/3438340/convert-to-ucs2 해당 링크의 코드를 사용해 인코딩해서 보내봤습니다.
하지만 정작 보내지는 문자는 알수없는 문자열이네요..ㅠㅠ
헥사코드가 디코딩되지않고 그대로 나온 느낌입니다
이렇게 해보세요.
해결하셨는지는 모르겠습니다만,
필요한 누군가를 위해 기록을 남겨둡니다.
작성하신 코드에는 아래 4가지 정도 문제가 있어보입니다.
첫번째, WriteLine 함수는 엔터를 자동으로 포함하므로 Write으로 대체
두번째, 중간중간 Thread.Sleep 함수 사용으로 응답 시간 삽입
세번째, 전화번호를 Hexa String으로 변환하여 입력
네번째, SendKeys.Send는 로컬용으로 송출되지 않습니다. \x1A로 대체
기타..기종마다 다를 수 있는데 AT+CMGW => AT+CMGS 로 바꾸어 해보세요.
string telnum = UnicodeStr2HexStr("010xxxxxxx");
string message = UnicodeStr2HexStr("안녕");
sp.Write("AT+CMGF=1" + Environment.NewLine);
Thread.Sleep(100);
sp.Write("AT+CSCS=\"UCS2\"" + Environment.NewLine);
Thread.Sleep(100);
sp.Write("AT+CSMP=17,167,0,8" + Environment.NewLine);
Thread.Sleep(100);
sp.Write("AT+CMGS=\"" + telnum + "\"" + Environment.NewLine);
Thread.Sleep(100);
sp.Write(message);
sp.Write("\x1A"); //16진수 1A
보태기
Linux 환경에서는 Environment.NewLine 대신 \r\n 을 사용해야합니다.
댓글 달기