powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы [новые:1] / Поиск: Искать ответы на сообщение: #116849  
7 сообщений из 7, страница 1 из 1
Языки программирования семейства Pascal / Из двоичного буфера в StringList
    #116849
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
s62  14.08.2022, 22:44
[игнорируется]
Просто Трёп  14.08.2022, 20:52
[игнорируется]
LoadFromStream жеж.
Вышло через LoadFromStream?

Если точно известно, что однобайтная строка, то можно как-нибудь типа такого:
Код: Delphi
1.
2.
3.
4.
5.
var s: AnsiString;

SetLength(s, SizeOf(Buf));
Move(Buf, s[1], SizeOf(Buf));
StringList.Text := s;
А, кстати, что будет с кодировкой у этого листа? Насколько я понял, кодировка СтрингЛиста может стать однобайтной только при использовании LoadFromFile и LoadFromStream, если она в файле или стриме однобайтная. А во всех остальных случаях будет юникод.
Вообще, как можно было не сделать однобайтный стринглист? Куча же задач, где юникод не нужен.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Из двоичного буфера в StringList
    #116863
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Просто Трёп  14.08.2022, 23:32
[игнорируется]
А, кстати, что будет с кодировкой у этого листа?
Implicit string cast from 'AnsiString' to 'string'.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Из двоичного буфера в StringList
    #116869
s62
Скрыть профиль Поместить в игнор-лист
s62 
Участник
Просто Трёп  15.08.2022, 00:00
[игнорируется]
Просто Трёп  14.08.2022, 23:32
[игнорируется]
А, кстати, что будет с кодировкой у этого листа?
Implicit string cast from 'AnsiString' to 'string'.
Да,
Код: Delphi
1.
StringList.Text := s;
вот тут преобразует в unicode неявно, т.к. левая часть - юникодная.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Из двоичного буфера в StringList
    #116872
s62
Скрыть профиль Поместить в игнор-лист
s62 
Участник
Просто Трёп  14.08.2022, 23:32
[игнорируется]
s62  14.08.2022, 22:44
[игнорируется]
Просто Трёп  14.08.2022, 20:52
[игнорируется]
LoadFromStream жеж.
Вышло через LoadFromStream?

Если точно известно, что однобайтная строка, то можно как-нибудь типа такого:
Код: Delphi
1.
2.
3.
4.
5.
var s: AnsiString;

SetLength(s, SizeOf(Buf));
Move(Buf, s[1], SizeOf(Buf));
StringList.Text := s;
А, кстати, что будет с кодировкой у этого листа? Насколько я понял, кодировка СтрингЛиста может стать однобайтной только при использовании LoadFromFile и LoadFromStream, если она в файле или стриме однобайтная. А во всех остальных случаях будет юникод.
Вообще, как можно было не сделать однобайтный стринглист? Куча же задач, где юникод не нужен.
Если я правильно понимаю, то в самом TStringList строки двухбайтовые, юникодные. Но он может загрузить содержимое из файла с однобайтными строками и тогда запомнит эту кодировку в свойстве Encoding и при сохранении в файл сохранит в этой же кодировке, если не указать кодировку явно.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Из двоичного буфера в StringList
    #116874
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
s62  15.08.2022, 00:21
[игнорируется]
Просто Трёп  14.08.2022, 23:32
[игнорируется]
s62  14.08.2022, 22:44
[игнорируется]
Просто Трёп  14.08.2022, 20:52
[игнорируется]
LoadFromStream жеж.
Вышло через LoadFromStream?

Если точно известно, что однобайтная строка, то можно как-нибудь типа такого:
Код: Delphi
1.
2.
3.
4.
5.
var s: AnsiString;

SetLength(s, SizeOf(Buf));
Move(Buf, s[1], SizeOf(Buf));
StringList.Text := s;
А, кстати, что будет с кодировкой у этого листа? Насколько я понял, кодировка СтрингЛиста может стать однобайтной только при использовании LoadFromFile и LoadFromStream, если она в файле или стриме однобайтная. А во всех остальных случаях будет юникод.
Вообще, как можно было не сделать однобайтный стринглист? Куча же задач, где юникод не нужен.
Если я правильно понимаю, то в самом TStringList строки двухбайтовые, юникодные. Но он может загрузить содержимое из файла с однобайтными строками и тогда запомнит эту кодировку в свойстве Encoding и при сохранении в файл сохранит в этой же кодировке, если не указать кодировку явно.
А, понятно. Для SaveToFile.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Из двоичного буфера в StringList
    #117454
Сквозняк
Скрыть профиль Поместить в игнор-лист
Участник
s62  15.08.2022, 00:21
[игнорируется]
Просто Трёп  14.08.2022, 23:32
[игнорируется]
s62  14.08.2022, 22:44
[игнорируется]
Просто Трёп  14.08.2022, 20:52
[игнорируется]
LoadFromStream жеж.
Вышло через LoadFromStream?

Если точно известно, что однобайтная строка, то можно как-нибудь типа такого:
Код: Delphi
1.
2.
3.
4.
5.
var s: AnsiString;

SetLength(s, SizeOf(Buf));
Move(Buf, s[1], SizeOf(Buf));
StringList.Text := s;
А, кстати, что будет с кодировкой у этого листа? Насколько я понял, кодировка СтрингЛиста может стать однобайтной только при использовании LoadFromFile и LoadFromStream, если она в файле или стриме однобайтная. А во всех остальных случаях будет юникод.
Вообще, как можно было не сделать однобайтный стринглист? Куча же задач, где юникод не нужен.
Если я правильно понимаю, то в самом TStringList строки двухбайтовые, юникодные. Но он может загрузить содержимое из файла с однобайтными строками и тогда запомнит эту кодировку в свойстве Encoding и при сохранении в файл сохранит в этой же кодировке, если не указать кодировку явно.
Тут есть проблема если в строках есть то, что глупые перекодировщики не смогут перекодировать и заменят вопросительными знаками или прочим неремонтируемым мусором. Вот потому параллельно с классами какие-то данные нужно хранить в равбитестрингах - у них кодировка отсутствует, а потому система не знает как их содержимое правильно портить.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Из двоичного буфера в StringList
    #117475
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Сквозняк  15.08.2022, 19:35
[игнорируется]
s62  15.08.2022, 00:21
[игнорируется]
Просто Трёп  14.08.2022, 23:32
[игнорируется]
s62  14.08.2022, 22:44
[игнорируется]
Просто Трёп  14.08.2022, 20:52
[игнорируется]
...
Вышло через LoadFromStream?

Если точно известно, что однобайтная строка, то можно как-нибудь типа такого:
Код: Delphi
1.
2.
3.
4.
5.
var s: AnsiString;

SetLength(s, SizeOf(Buf));
Move(Buf, s[1], SizeOf(Buf));
StringList.Text := s;
А, кстати, что будет с кодировкой у этого листа? Насколько я понял, кодировка СтрингЛиста может стать однобайтной только при использовании LoadFromFile и LoadFromStream, если она в файле или стриме однобайтная. А во всех остальных случаях будет юникод.
Вообще, как можно было не сделать однобайтный стринглист? Куча же задач, где юникод не нужен.
Если я правильно понимаю, то в самом TStringList строки двухбайтовые, юникодные. Но он может загрузить содержимое из файла с однобайтными строками и тогда запомнит эту кодировку в свойстве Encoding и при сохранении в файл сохранит в этой же кодировке, если не указать кодировку явно.
Тут есть проблема если в строках есть то, что глупые перекодировщики не смогут перекодировать и заменят вопросительными знаками или прочим неремонтируемым мусором. Вот потому параллельно с классами какие-то данные нужно хранить в равбитестрингах - у них кодировка отсутствует, а потому система не знает как их содержимое правильно портить.
Ну да. Это повод для большого холивара. Вот, например, разраб HWiNFO пишет в логи однобайтные строки ASCII и использует код B0 (символ градуса в большинстве шрифтов °). Как можно догадаться, что это символ градуса? В шрифте Terminal это другой символ. То есть, человек легко определит проблему по контексту, скажет: "Ага, надо вот эту кодировку использовать". А программно как? И те, и другие строки однобайтные.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы [новые:1] / Поиск: Искать ответы на сообщение: #116849  
Пользователи онлайн (123): Анонимы (104), Брюквенные годы, IT-Клоп, Yandex Bot, prostozevs, a.v.z, Дед-Папыхтет, Bing Bot, Сталкер 1 мин., Горбатый ёж 1 мин., битый 3 мин., Буся 4 мин., Артефакт 5 мин., alexker 5 мин., s62 5 мин., Кусь 6 мин., Google Bot 7 мин., Redd 7 мин., Antonariy 9 мин., sergey11 9 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]