3G модем отвечает в UTF16

Есть 3G модем Hyawei E153 с родной прошивкой и драйверами. Windows 11. Delphi 10.3 Компонент TBComPort ver.2.20. Запускаю готовые, откомпилированые демки компонента - модем адекватно отвечает на AT команды. Открываю примеры идущие с компонентом, запускаю - все общение с модемом идет в кодировке UTF-16. Преобразоватеь его ответы в KOI-8 либо другую читаемую кодировку не удается.

Первый скрин - готовая демка

Второй скрин - откомпилированная мной

Пробовал отправлять команды: Str:=('AT+CSCS="UTF-8"'); BComPort1.WriteStr(Str);

Пробовал конвертировать ответы: ConvertUTF16LEToCP855(WideString(Str));

Результат не меняется. Подскажите, как колучить читаемый ответ модема?

Исодный код Семпла. В данном случае я его не менял... Получаем UTF-16

(* Поступившие в порт данные считываются и отображаются в Memo1 *) 
procedure TForm1.BComPort1RxChar(Sender: TObject; Count: Integer); 
var Str: String; 
   begin BComPort1.ReadStr(Str, Count); 
   Memo1.Lines.Add(Str); 
end; 

так же отсылаю комманду на модем. Она не отображается в полученных данных и модем не отвечает на нее.

var
  AStr: AnsiString;
begin
  AStr := 'AT+CREG?';
  BComPort1.WriteStr(AStr);
end;

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

Автор решения: MBo

Если у вас современная версия Delphi (от 2009), то String по умолчанию юникодный. Потому вам и кажется, что ответ UTF16.

Не знаю, как у вашего компонента устроен ReadStr - вероятно, чтение в AnsiString сработает. Если нет - то читайте байты:

procedure TForm1.BComPort1RxChar(Sender: TObject; Count: Integer);
var AStr: AnsiString; 
begin 
   SetLength(AStr, Count);
   BComPort1.Read(AStr[1], Count); 
   Memo1.Lines.Add(AStr); 
end;
→ Ссылка