Перейти к содержанию
Fire Monkey от А до Я
  • 0

Перевод массива кодов символов в строку


estra

Вопрос

Есть массив

const
  arr: array[0..7] of Byte = ( 74, 234, 71, 252, 63, 31, 125, 34 );

При формировании из него строки под виндой проблем нет, а под андроидом вылетает ошибка:

 

No mapping for the Unicode character exists in the target multi-byte code pdge.

var
  s: string;
begin
  s := StringOf(arr);
end;

Как избавиться от ошибки?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Администраторы

На мобильных платформах по умолчанию используется Unicode. Как известно, символов занимает не байт, а два. Ошибка вам говорит о том, что для вашего массива символов в ASCII кодировки нету соответствующих символов в UTF.

 

Решение

Пишите массив с кодами символов специально под UniCode.

Ссылка на комментарий
  • 0
  • Администраторы

Да, вы правы. Ошибся.

 

StringOf использует текущую кодировку на платформе, на Windows - это ANSI, на мобильных платформах - это UTF8:

function StringOf(const Bytes: TBytes): UnicodeString;
begin
  if Assigned(Bytes) then
    Result := TEncoding.Default.GetString(Bytes, Low(Bytes), High(Bytes) + 1)
  else
    Result := '';
end;

Поэтому лучше используйте TEncoding.ANSII:

TEncoding.ANSI.GetString(BufferOfBytes, Low(BufferOfBytes), High(BufferOfBytes) + 1);
Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...