Форум программистов, компьютерный форум, киберфорум
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
1 / 1 / 0
Регистрация: 19.10.2023
Сообщений: 48

UTF-16LE to Win1251

20.01.2026, 16:18. Показов 3990. Ответов 69

Студворк — интернет-сервис помощи студентам
䠠䑉⠠畈慭湉整晲捡⁥敄楶散⥳ UTF-16LE - https://www.online-decoder.com/ru дал ответ.
Устройства HID (Human Interface Devices) - Win1251

Две строки, как верхнюю строку конвертировать UTF-16LE в Win1251, чтоб получилась 2я строка?

ИИ написал мне функу преобразования для проверки, но она вылетает с ошибкой

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function StringOfUtf16(const Bytes: TBytes): string;
var
  i: Integer;
begin
  SetLength(Result, Length(Bytes) div 2);
  for i := 0 to High(Bytes) do
    if (i mod 2 = 0) then
      Result[i shr 1] := Char(Bytes[i] or $FF00); // Исправление для UTF-16LE <<<вылет в отладчик
end;
 
procedure TForm1.BitBtn2Click(Sender: TObject);
var
  Utf16Bytes: TBytes; // Байты в формате UTF-16LE
  Utf8Bytes: TBytes;
  AnsiResult: AnsiString;
begin
  // Пример данных в UTF-16LE (например, "Hello")
  Utf16Bytes := [$48, $00, $65, $00, $6C, $00, $6C, $00, $6F, $00];
 
  // Сначала преобразуем UTF-16LE в UTF-8
  Utf8Bytes := TEncoding.UTF8.GetBytes(StringOfUtf16(Utf16Bytes));
 
  // Затем преобразуем UTF-8 в ANSI (CP1251)
  AnsiResult := TEncoding.ANSI.GetString(Utf8Bytes);
 
  // Отображаем результат
  ShowMessage(AnsiResult);
end;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.01.2026, 16:18
Ответы с готовыми решениями:

Разные кодировки файлов (ASCII, UTF-8, UTF-16)
Привет всем! Нужно написать программу поиска файлов, содержащих заданную строку. Т.е....

IBDatabase>CharacterSet>win1251=Error!!!
Уважаемые, подскажите пожалуйста! Вылетает ошибка, ругается на кодировку. Создаю приложение для...

Преобразовать текст из кодировки Win1251 в DOS-866
Господа программисты, Вашему вниманию предлагаю следующий код (юнит выложен полностью): unit...

69
1 / 1 / 0
Регистрация: 19.10.2023
Сообщений: 48
21.01.2026, 14:51  [ТС]
Студворк — интернет-сервис помощи студентам
А есть компонент, который показывает в UTF-16LE?
0
Эксперт .NET
 Аватар для Rius
13853 / 7895 / 1707
Регистрация: 25.05.2015
Сообщений: 23,963
Записей в блоге: 14
21.01.2026, 14:54
А дельфя какая?
0
1 / 1 / 0
Регистрация: 19.10.2023
Сообщений: 48
21.01.2026, 15:01  [ТС]
10.3.3
0
Эксперт .NET
 Аватар для Rius
13853 / 7895 / 1707
Регистрация: 25.05.2015
Сообщений: 23,963
Записей в блоге: 14
21.01.2026, 15:10
Вот этому методу попробуйте скормить полученный от api массив
https://docwiki.embarcadero.co... .GetString
0
1 / 1 / 0
Регистрация: 19.10.2023
Сообщений: 48
21.01.2026, 15:36  [ТС]
Нашел хороший исходник, аналог Диспетчера устройств. Буду его копать, черпать знания).
0
Эксперт .NET
 Аватар для Rius
13853 / 7895 / 1707
Регистрация: 25.05.2015
Сообщений: 23,963
Записей в блоге: 14
21.01.2026, 16:00
Встроенным методом запрещено пользоваться? Нужно наступить на грабли?
0
1 / 1 / 0
Регистрация: 19.10.2023
Сообщений: 48
21.01.2026, 16:06  [ТС]
За другим компом сижу, не начем проверить.
0
1 / 1 / 0
Регистрация: 19.10.2023
Сообщений: 48
23.01.2026, 07:49  [ТС]
Работает, кому надо, пользуйтесь на здоровье). Всем спасибо за помощь!

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Uses
  SetupApi, 
 
Function GetDeviceName(PnPHandle: HDEVINFO; const DevData: TSPDevInfoData): Ansistring;
Var
  BytesReturned: DWORD;
  RegDataType: DWORD;
  Buffer: array [0..256] of AnsiCHAR;
begin
  BytesReturned := 0;
  RegDataType := 0;
  Buffer[0] := #0;
  SetupDiGetDeviceRegistryProperty(PnPHandle, DevData, SPDRP_FRIENDLYNAME,
    RegDataType, PByte(@Buffer[0]), SizeOf(Buffer), BytesReturned);
  Result := Buffer;
  if Result<>'' then exit;
  BytesReturned := 0;
  RegDataType := 0;
  FillChar (Buffer, SizeOf (Buffer), #0);
  SetupDiGetDeviceRegistryProperty(PnPHandle, DevData, SPDRP_DEVICEDESC,
    RegDataType, PByte(@Buffer[0]), SizeOf(Buffer), BytesReturned);
  Result := Buffer;
end;
 
procedure AddDevices(aNode: TTreeNode; aGUID: TGUID);
var
  PnPHandle: HDEVINFO;
  DevData: TSPDevInfoData;
  RES: LongBool;
  Devn: Integer;
  _DN,_PN:ULONG;
  aString: PAnsiString;
begin
  PnPHandle := SetupDiGetClassDevs(@aGUID, nil, 0, DIGCF_PRESENT);
  if PnPHandle = INVALID_HANDLE_VALUE then  Exit;
 
  Devn := 0;
  repeat
   DevData.cbSize := SizeOf(DevData);
   RES := SetupDiEnumDeviceInfo(PnPHandle, Devn, DevData);
   if (RES) and (_DN <> DN_ROOT_ENUMERATED) then
    begin
 
      Form1.TreeView1.Items.AddChild(aNode, GetDeviceName(PnPHandle, DevData));
      Inc(Devn);
    end;
   if Devn = 0 then
    begin
      Form1.TreeView1.Items.Delete(aNode);
      break;
    end;
  until not RES;
  SetupDiDestroyDeviceInfoList(PnPHandle);
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  _i: DWORD;
  Res: CONFIGRET;
  GUID: PGUID;
  Buffer: Array [0..1023] of CHAR;
  BufSize: DWORD;
  Node: TTreeNode;
begin
  DeviceClassesList:=TStringList.Create;
  _i:=0;
  repeat
    GetMem(GUID, SizeOf(TGUID));
    Res := CM_Enumerate_Classes(_i, GUID^, 0);
    if Res <> CR_NO_SUCH_VALUE then
    begin
      FillChar (Buffer, SizeOf (Buffer), #0);
      SetupDiGetClassDescriptionA(GUID^, @Buffer[0], Length(Buffer), BufSize);
      DeviceClassesList.AddObject(Pchar(PAnsiChar (@Buffer[0])), TObject(GUID));
    end;
    Inc(_i);
 
  until Res = CR_NO_SUCH_VALUE;
  FreeMem (GUID);
 
  for _i:=0 to DeviceClassesList.Count-1 do
   begin
     Node := TreeView1.Items.AddChild(nil, PAnsiChar (DeviceClassesList.Strings[_i]));
     GUID := PGUID(DeviceClassesList.Objects[_i]);
     AddDevices(Node, GUID^);
   end;
  TreeView1.AlphaSort(True);
end;
0
Эксперт .NET
 Аватар для Rius
13853 / 7895 / 1707
Регистрация: 25.05.2015
Сообщений: 23,963
Записей в блоге: 14
23.01.2026, 07:51
0
Нарушитель
10901 / 5835 / 1289
Регистрация: 12.03.2015
Сообщений: 26,926
23.01.2026, 07:58
Цитата Сообщение от Excalibug Посмотреть сообщение
Работает, кому надо, пользуйтесь на здоровье).
0
1 / 1 / 0
Регистрация: 19.10.2023
Сообщений: 48
23.01.2026, 08:02  [ТС]
что не так?
0
Эксперт .NET
 Аватар для Rius
13853 / 7895 / 1707
Регистрация: 25.05.2015
Сообщений: 23,963
Записей в блоге: 14
23.01.2026, 08:07
На юникодной винде в юникодной ide переводить юникодную строку в ansi.
Действительно, что не так?...
Не, всё нормально. Так держать!
0
Нарушитель
10901 / 5835 / 1289
Регистрация: 12.03.2015
Сообщений: 26,926
23.01.2026, 08:07
Цитата Сообщение от Excalibug Посмотреть сообщение
что не так?
ANSI твоя никому нахрен не упала. Все уже 25 лет юникод юзают и не заморачиваются.
Ты, главное



Выпей валерьяночки или пивка. Покури...
0
1 / 1 / 0
Регистрация: 19.10.2023
Сообщений: 48
23.01.2026, 08:08  [ТС]
С кодировками мало знаком, поэтому возникли трудности. Если не использовать PAnsiChar, то будет выводиться нечитабельный вид.
0
Нарушитель
10901 / 5835 / 1289
Регистрация: 12.03.2015
Сообщений: 26,926
23.01.2026, 08:10
Цитата Сообщение от Excalibug Посмотреть сообщение
Если не использовать PAnsiChar, то будет выводиться нечитабельный вид.
И ты, вместо того, чтобы попытаться понять, что происходит, побежал рожать аццкого франкенштейна. Действительно, что могло пойти не так?
0
Эксперт .NET
 Аватар для Rius
13853 / 7895 / 1707
Регистрация: 25.05.2015
Сообщений: 23,963
Записей в блоге: 14
23.01.2026, 08:27
Цитата Сообщение от Excalibug Посмотреть сообщение
С кодировками мало знаком, поэтому возникли трудности. Если не использовать PAnsiChar, то будет выводиться нечитабельный вид.
Надо сесть и разобраться. Сейчас не 90-е годы.
0
1 / 1 / 0
Регистрация: 19.10.2023
Сообщений: 48
23.01.2026, 17:57  [ТС]
Сейчас тоже франкенштейн (немец что ли или еврей?)?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Function GetDeviceName(PnPHandle: HDEVINFO; const DevData: TSPDevInfoData): WideString;
Var
  BytesReturned: DWORD;
  RegDataType: DWORD;
  Buffer: array [0..Max_Path] of WideChar;
begin
  //Попытка получить FrendlyName
  if SetupDIGetDeviceRegistryProperty (PnPHandle, DevData,  SPDRP_FriendlyName,
      RegDataType, @Buffer[0], SizeOf (Buffer), BytesReturned) then
  Begin
    Result := Buffer;
    Exit;
  End;
 
  //Если попытка не удалась
  if SetupDIGetDeviceRegistryProperty (PnPHandle, DevData, SPDRP_DeviceDesc,
      RegDataType, @Buffer[0], SizeOf (Buffer), BytesReturned) then
  Begin
    Result := Buffer;
    Exit;
  End;
  Result := '';//если ничего не помогло
end;
 
procedure AddDevices(aNode: TTreeNode; aGUID: TGUID);
Var
  PnPHandle: HDEVINFO;
  DevData: TSPDevInfoData;
  RES: LongBool;
  DevN: Integer;
 
  //Для работы с именем устройства работаем с ANSI символами
  DeviceName: Array [0..Max_Path] Of Char;
begin
  PnPHandle := SetupDiGetClassDevs(@aGUID, nil, 0, DIGCF_PRESENT);// or DIGCF_DeviceInterface);
  if PnPHandle = Invalid_Handle_Value then Exit;
  Try
    DevN := 0;
    Repeat
      FillChar (DevData, SizeOf (DevData), 0);
      DevData.cbSize := SizeOf (TSPDevInfoData);
      Res := SetupDIEnumDeviceInfo (PnPHandle, DevN, DevData);
      if Res then
      Begin
        Form1.TreeView1.Items.AddChild(aNode, PAnsiChar (GetDeviceName(PnPHandle, DevData)));
        Inc (DevN);
      End;
      if Devn = 0 then
      begin
        Form1.TreeView1.Items.Delete(aNode);
        break;
      end;
      Inc (DevN);
    Until Not Res;
  Finally
    SetupDIDestroyDeviceInfoList (PnPHandle);
  End;
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  _i: DWORD;
  Res: CONFIGRET;
  GUID: PGUID;
  Buffer: Array [0..1023] of CHAR;
  BufSize: DWORD;
  Node: TTreeNode;
  ClassGuid: TGUID;
begin
  DeviceClassesList:=TStringList.Create;
  Try
    _i:=0;
    FillChar (ClassGUID, SizeOf (ClassGUID), 0);
    Repeat
      GetMem(GUID, SizeOf(TGUID));
      Res := CM_Enumerate_Classes(_i, GUID^, 0);
      if Res <> CR_NO_SUCH_VALUE then
      begin
        FillChar (Buffer, SizeOf (Buffer), #0);
        BufSize := Length (Buffer);
        SetupDiGetClassDescriptionA(GUID^, @Buffer[0], Length(Buffer),
        BufSize);//если Nil то ошибка компиляции
        DeviceClassesList.AddObject(Pchar(@Buffer[0]), TObject(GUID));
      End;
      Inc(_i);
    until Res = CR_NO_SUCH_VALUE;
    FreeMem (GUID);
 
    For _i:=0 to DeviceClassesList.Count-1 do
    begin
      Node := TreeView1.Items.AddChild(nil,
        PAnsiChar (DeviceClassesList.Strings[_i]));//PANSIChar - иначе кракозябры
      GUID := PGUID(DeviceClassesList.Objects[_i]);
      AddDevices(Node, GUID^);
    End;
    TreeView1.AlphaSort(True);
  Finally
    FreeAndNil (DeviceClassesList);
  End;
end;
0
Эксперт .NET
 Аватар для Rius
13853 / 7895 / 1707
Регистрация: 25.05.2015
Сообщений: 23,963
Записей в блоге: 14
23.01.2026, 22:12
Почему у меня всё работает встроенными средствами без всякого преобразования в анси? ЧЯДНТ?


Цитата Сообщение от Excalibug Посмотреть сообщение
Сейчас тоже франкенштейн (немец что ли или еврей?)?
Немец или швейцарец, но точно не известно.

Цитата Сообщение от Verevkin Посмотреть сообщение
аццкого франкенштейна
Виктор Франкенштейн это учёный, который пытался создать жизнь из неживой матери.
Он ни разу не был аццким. Созданное им существо - тоже.
Чудовищем в романе Мэри Шэлли были окружающие их люди.
0
Нарушитель
10901 / 5835 / 1289
Регистрация: 12.03.2015
Сообщений: 26,926
23.01.2026, 22:18
Здесь не нужно приведение к указателю. Второй параметр метода AddChild имеет тип string.



Ты где взял этот кусок говнокода, извращенец???!!11
0
1 / 1 / 0
Регистрация: 19.10.2023
Сообщений: 48
24.01.2026, 01:10  [ТС]
А вот как не крути, показывает кириллицу только если через PAnsiChar. И таблицу UFT-16LE для преобразования не встречал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2026, 01:10

Изменение кодировки Win1251 в UTF8 (необычный случай)
Всем привет! ... обычно кодировка проблем не доставляла, а вот недавно столкнулся с проблемой...

Очередная проблема Sqlite3 + win1251
Уважаемые товарищи. Вопрос жизни и смерти! Прошу помочь с проблемой чтения кириллицы из sqlite3...

соханение в бокнот в кодировке UTF-8
if SaveTextFileDialog1.Execute then Memo1.Text := AnsiToUtf8(Memo1.Text); ...

Перекодировать текст в UTF-8
Подскажите как можно перевести введённій в ТЕдит текст в кодировку UTF-8?

Кодировки OEM, MAC, UTF-8, КОИ8,ISO 8859-5
Здравствуйте. Вот дописываю свою программу и у меня возникла следующая проблема. Надо организовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru