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 шт):
Если у вас современная версия 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;

