Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Работа с Unicode UTF-16


Автор: Geniebal 16.7.2010, 08:40
столкнулся с такой проблемой: у меня есть массив в hex-формате. Заранее известно что он содержит строку в UTF-16LE. Подскажите как привести это к человеческому виду? т.е. из UTF-16 к виду доступному для понимания пользователя.

З.Ы. из hex'a в dec переводить надо?

Автор: Snowy 16.7.2010, 17:07
Мало данных.
Что ещё за массив в hex-формате? В дельфи нет такого понятия.
И почему UTF-16 (WideString) вдруг стал непонятен для пользователя?

Автор: Geniebal 19.7.2010, 11:44
400000002800000000000000000006001000000018000000e2cc6e2d18b31446bc050c8de5616e1350000000800000000000180000000200680000001800000001000480480000005800000000000000140000000200340002000000000014009f011200010100000000000512000000000018009f0112000102000000000005200000002002000001020000000000052000000020020000010200000000000520000000200
Код

20000600000001800000000001800000003000000000018000000700000002800000000001800000004000c000000180000000000000000000000

это есть hex-массив.
по идее в нем храниться имя тома в UTF-16LE формате. Как из этого получить буквенно-символьный вариант понятный для пользователя? 

Автор: Keeper89 19.7.2010, 12:23
Ну как-то так: http://forum.vingrad.ru/forum/act-ST/f-84/t-155753.html

Автор: Snowy 19.7.2010, 12:29
Из этого - никак.
Это совсем не похоже на UTF-16, даже приблизительно.

Автор: Geniebal 19.7.2010, 13:11
Цитата

Это совсем не похоже на UTF-16, даже приблизительно.


Это дамп в 16-тиричном виде. А вот как его преобразовать к человеческому виду - это и есть вопрос?

Автор: Snowy 19.7.2010, 14:51
Повторяю - никак.
Данный набор байт не имеет никакого отношения к тексту.
Не только UTF-16, а вообще ни к какому тексту.
То есть говоря просто - это не текст. Ни в какой бы то ни было кодировке.

Добавлено через 3 минуты и 44 секунды
Текст в UTF-16LE выглядит вот так:
1C 04 30 04 3C 04 30 04 20 00 3C 04 4B 04 3B 04 30 04 20 00 40 04 30 04 3C 04 43 04
У тебя же сплошные нули - это вообще какой-то мусор.

Автор: Geniebal 21.7.2010, 16:44
Код

500072006f0062006100

Вот это точно utf-16. вопрос - как его дать проге (т.е. какой функции), чтоб мне вывела уже в нормальных знаках

Добавлено @ 16:48
есть же функция UTF8Dencode  а для UTF-16 есть что то подобное?

Автор: Snowy 22.7.2010, 11:20
А для UTF-16 есть знак :=
Код
var
  s: string;
  i: integer;
  p: array of byte;
  n: integer;
begin
  s := '500072006f0062006100'; // исходные данные
  n := Length(s) div 2;
  SetLength(p, n);
  for i := 0 to n - 1 do // превращаем строку в массив байт
    p[i] := StrToInt('$' + copy(s, i*2+1, 2));
  s := PWideChar(@p[0]); // превращаем массив байт в строку просто приравнивая WideString
  ShowMessage(s);
end;

Автор: Geniebal 26.10.2010, 11:11
спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)