Отправка СМС на кирилице
Delphi 10.3 + BComPort.
3g Hyawei E153 на AT+CSCS=? отвечает -
+CSCS: ("IRA","GSM","UCS2")
OK
Приведенный ниже код без проблем отправляет сообщение на латинице (закоментированная строка). С русскими буквами - ошибка (+CMS ERROR: 305).
Если раскоментировать закоментированные строки - модем отключается на несколько секунд и находится опять. Пробовал Sleep(7000) - не помогло. 7 секунд подобрал экспериментально.
function EncodeUnicodeToUCS2(const S: string): string;
var
I: Integer;
begin
Result := '';
for I := 1 to Length(S) do
begin
Result := Result + IntToHex(Ord(S[I]), 4);
end;
end;
procedure TfrmMain.Button1Click(Sender: TObject);
var
AStr: AnsiString;
StringNumber: String;
StringMessage: String;
begin
StringNumber := '+XXXXXXXXXXXXX'; //- номер в правильном формате
StringMessage := 'Тестовое сообщение 123 TEST test ';
// StringMessage := '123 TEST test ';
AStr := 'AT+CMGF=1' + #13#10;
frmMain.BCPort1.Write(AStr[1], Length(AStr));
Sleep(100);
AStr := 'AT+CSCS="UCS2"' + #13#10; // Устанавливаем кодировку UCS2
frmMain.BCPort1.Write(AStr[1], Length(AStr));
Sleep(100);
// AStr := 'AT+CSMP=17,167,0,8' + #13#10; // Устанавливаем кодировку UCS2
// frmMain.BCPort1.Write(AStr[1], Length(AStr));
// Sleep(500);
AStr := 'AT+CMGS="' +EncodeUnicodeToUCS2(StringNumber) + '"' + #13;
frmMain.BCPort1.Write(AStr[1], Length(AStr));
Sleep(100);
AStr := EncodeUnicodeToUCS2(StringMessage) + #26;
frmMain.BCPort1.Write(AStr[1], Length(AStr));
Sleep(500);
end;