отправка СМС с русскими символами

Есть 3G модем Hyawei E153 с родной прошивкой и драйверами. Windows 11. Delphi 10.3 Компонент TBComPort ver.2.20.

Следующий код без проблем отправляет СМС с латиницей:

procedure sendSMS(const phoneNumber, messageText: WideString);
var
  AStr: AnsiString;
  ANumber: AnsiString;
  AMessage: AnsiString;

begin
  ANumber  := phoneNumber;
  AMessage := messageText;

  AStr := 'AT+CMGF=1' + #13#10;
  frmMain.BComPort1.Write(AStr[1], Length(AStr));
  Sleep(100);

  AStr := 'AT+CMGS="' + ANumber + '"' + #13#10;
  frmMain.BComPort1.Write(AStr[1], Length(AStr));
  Sleep(100);

  AStr := AMessage + #26;
  frmMain.BComPort1.Write(AStr[1], Length(AStr));
  Sleep(500);
end;

Добавляю функцию перекодировки текста в Юникод

function EncodeUnicodeToUCS2(const s: WideString): AnsiString;
var
  i: Integer;
begin
  SetLength(Result, Length(s) * 2);
  for i := 1 to Length(s) do
  begin
    Result[i * 2 - 1] := AnsiChar(Ord(s[i]) div 256);
    Result[i * 2] := AnsiChar(Ord(s[i]) mod 256);
  end;
end;

procedure sendSMS(const phoneNumber, messageText: WideString);
var
  AStr: AnsiString;
  ANumber: AnsiString;
  AMessage: AnsiString;

begin
  ANumber  := phoneNumber;
  AMessage := messageText;

  AStr := 'AT+CMGF=1' + #13#10;
  frmMain.BComPort1.Write(AStr[1], Length(AStr));
  Sleep(100);

  AStr := 'AT+CSCS="UCS2"' + #13#10; // Устанавливаем кодировку UCS2
  frmMain.BComPort1.Write(AStr[1], Length(AStr));
  Sleep(100);

  AStr := 'AT+CMGS="' + ANumber + '"' + #13#10;
  frmMain.BComPort1.Write(AStr[1], Length(AStr));
  Sleep(100);

  AStr := EncodeUnicodeToUCS2(AMessage) + #26;
  frmMain.BComPort1.Write(AStr[1], Length(AStr));
  Sleep(500);
end;

и после этого получаем ответ модема:

AT+CMGF=1

OK
AT+CSCS="UCS2"

OK
AT+CMGS="+38050ххххххх" // номер правильный

ERROR

Ответы (0 шт):