tag:blogger.com,1999:blog-1702873441071265539.post5835249002607966795..comments2023-05-29T19:02:20.570+03:00Comments on Блог GunSmoker-а: Работа с текстовыми файлами в любой кодировке из Delphi до 2009GunSmokerhttp://www.blogger.com/profile/15611696588191431330noreply@blogger.comBlogger26125tag:blogger.com,1999:blog-1702873441071265539.post-39295079957362501552018-04-03T22:56:24.564+03:002018-04-03T22:56:24.564+03:00Поставил Delphi 10.2 Starter там такого бага нет. ...Поставил Delphi 10.2 Starter там такого бага нет. Даже не викидывал из uses StringListUnicodeSupport, хотя он так как-бы и ненуженAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-12346345524528495452018-04-03T14:25:33.406+03:002018-04-03T14:25:33.406+03:00При сохранение все вроде хорошо конвертируется и с...При сохранение все вроде хорошо конвертируется и сохраняется, к сожалению, кроме:<br />StringList.SaveToFile(FileName, TEncoding.BigEndianUnicode); вылетает AV (Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-9885770836489087472018-04-03T12:38:50.429+03:002018-04-03T12:38:50.429+03:00Так и не должен. BOM же нет, как он кодировку опре...Так и не должен. BOM же нет, как он кодировку определит? Словарей нет, таблиц эвристики нет.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-69578169335177735242018-04-03T10:00:02.348+03:002018-04-03T10:00:02.348+03:00Не определяет кодировку utf-8 without BOMНе определяет кодировку utf-8 without BOMAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-26994275109767079032018-03-27T14:18:16.104+03:002018-03-27T14:18:16.104+03:00Спасибо теперь я все понял.Спасибо теперь я все понял.Anonymoushttps://www.blogger.com/profile/14777665305758534767noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-84358925545111442882018-03-27T14:10:35.870+03:002018-03-27T14:10:35.870+03:00В ANSI строках старых версий Delphi может находитс...В ANSI строках старых версий Delphi может находится лишь одна кодировка - ACP, которая настраивается системой ("язык для не-Unicode программ"). В "русской" Windows она равна Win-1251. Соответственно, никакими усилиями японские иероглифы (к примеру) в неё вы не запишете. <br /><br />Когда вы загружаете текст из Unicode: если в нём лежат русские буквы - они без проблем преобразуются в Win-1251 без потерь. Но если там лежат символы вне Win-1251 (западно-европейская латиница, иероглифы, хинди и др.) - эти символы нельзя преобразовать в Win-1251, поэтому они будут заменены вопросиками.<br /><br />Поэтому мне не очень понятна задача преобразования из одной ANSI-кодировки в <b>произвольную</b> другую. Если только целевая кодировка не OEM и не Unicode, то такое преобразование не имеет смысла - ведь общих символов у двух разных ANSI кодировок просто нет. Вам необходима поддержка Unicode, если вы хотите работать с несколькими разными кодировками. В старых Delphi вы можете это делать, но не стандартным кодом RTL: вам нужно использовать WideString (Unicode строки) вместо String (ANSI строки), а также заменить все классы (TStringList) и весь код с String на WideString. Извращение, но можно. Но проще перейти на новую Delphi с родной поддержкой Unicode.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-2930087740125466182018-03-27T14:01:14.957+03:002018-03-27T14:01:14.957+03:00Это я тоже не совсем понял, но как тогда я без про...Это я тоже не совсем понял, но как тогда я без проблем отрываю и просматриваю без абракадабры файлы в Unicode?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-80469718814646483122018-03-27T00:39:46.557+03:002018-03-27T00:39:46.557+03:00Это прикол такой? Вы понимаете, что в старых ANSI ...Это прикол такой? Вы понимаете, что в старых ANSI версиях Delphi строки не могут хранить данные в любых кодировках? Это же однобайтовые ANSI строки. Если только как бесмысленный набор байт.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-6107651095574414912018-03-26T23:45:15.114+03:002018-03-26T23:45:15.114+03:00Delphi7Delphi7Anonymoushttps://www.blogger.com/profile/14777665305758534767noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-5859154760020383332018-03-26T23:44:19.908+03:002018-03-26T23:44:19.908+03:00Да именно в памяти, уже после загрузки. А перекоди...Да именно в памяти, уже после загрузки. А перекодировать нужно из любой в любую, ну конечно те которые допускает TEncodingAnonymoushttps://www.blogger.com/profile/14777665305758534767noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-50983483397959126262018-03-26T19:20:47.870+03:002018-03-26T19:20:47.870+03:00Есть, конечно. Я просто задачи не вижу. Вам в памя...Есть, конечно. Я просто задачи не вижу. Вам в памяти надо StringList из одной кодировки перегнать в другую? И всё это в старых ANSI Delphi? А из какой кодировки в какую?GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-39436903652499664462018-03-26T16:33:51.711+03:002018-03-26T16:33:51.711+03:00Получается, что чтобы перекодировать, то нужно все...Получается, что чтобы перекодировать, то нужно все выгрузить в поток, а затем заново из потока загрузиться?<br /> <br />StringList.SaveToStream(mysream, TEncoding.UTF8);<br />StringList.LoadFromStream(mysream);<br /><br />Других вариантов нет?Anonymoushttps://www.blogger.com/profile/14777665305758534767noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-53200284631075625942018-03-26T15:26:05.784+03:002018-03-26T15:26:05.784+03:00Кто вам справку-то мешает открыть?Кто вам <a href="http://docwiki.embarcadero.com/RADStudio/en/Using_TEncoding_for_Unicode_Files" rel="nofollow">справку</a>-то мешает открыть?GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-10534210953052339022018-03-26T14:22:27.027+03:002018-03-26T14:22:27.027+03:00Хорошая статья, спасибо. Может подскажите как можн...Хорошая статья, спасибо. Может подскажите как можно конвертировать StringList в нужную кодировку с уже загруженным текстом?Anonymoushttps://www.blogger.com/profile/14777665305758534767noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-77771718125599079482018-03-23T13:40:31.472+03:002018-03-23T13:40:31.472+03:00Не очень понятно зачем это надо, если в ANSI-верси...Не очень понятно зачем это надо, если в ANSI-версиях Delphi в строке может лежать только одна кодировка: ACP. Но если сильно хотите, то можно просто скопировать код StringListUnicodeSupport.TStringList.LoadFromStream с минимальными изменениями. В том коде у вас на руках будет Encoding - экземпляр TEncoding. Ну а его класс можно сравнить с известными: TUTF8Encoding, например.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-79131951474207035642018-03-23T12:37:14.971+03:002018-03-23T12:37:14.971+03:00Отлично, я думал уже переводить проект на новую ве...Отлично, я думал уже переводить проект на новую версию Delphi как раз из-за этого.<br />Порывшись в исходниках не нашел где мне взять информацию, какою именно кодировку я загрузил? не подскажите?Anonymoushttps://www.blogger.com/profile/14777665305758534767noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-49593932038810280492017-10-28T22:16:37.867+03:002017-10-28T22:16:37.867+03:00Доброго времени суток. Столкнулся с проблемой коди...Доброго времени суток. Столкнулся с проблемой кодировки текстовых файлов. Прочел Вашу статью. Заинтересовало. В какие директории Делфи 7 следует поместить указанные модули так чтобы заработало?Anonymoushttps://www.blogger.com/profile/00971466771584335055noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-55504216807704310232011-08-30T01:19:09.452+04:002011-08-30T01:19:09.452+04:00Спасибо Вам. Долго не мог найти ответ на свой вопр...Спасибо Вам. Долго не мог найти ответ на свой вопрос, а именно: "Как загрузить Unicode файл в StringList"Delphistnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-2857076688141079002010-05-04T02:59:32.326+04:002010-05-04T02:59:32.326+04:00>>> либо это ваш код, либо код Борлана(ок...>>> либо это ваш код, либо код Борлана(ок, ок, Эмбаркадера) допиленный вами о совместимости с D4<br />Я же чётко сказал: Encoding.pas - это оформленный в отдельный модуль класс TEncoding из D2010.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-71967414566702308742010-05-04T01:39:54.963+04:002010-05-04T01:39:54.963+04:00ну вот как бы одно из двух
либо это ваш код, либо ...ну вот как бы одно из двух<br />либо это ваш код, либо код Борлана(ок, ок, Эмбаркадера) допиленный вами о совместимости с D4.<br />или - или.<br /><br />> Если вопрос про авторство - то это мой код<br /><br />> Нужно просто вытащить из Delphi 2010 код TEncodingAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-85856131966784797182010-05-03T13:04:10.048+04:002010-05-03T13:04:10.048+04:00>>> Ну вот, чтож ты не сказал что Encodin...>>> Ну вот, чтож ты не сказал что Encoding выдран из джедая.<br />С чего вы это взяли? Encoding.pas - это вынесенный в отдельный модуль класс TEncoding из Delphi 2010 с адаптацией под старые версии Delphi (D4 и выше). Джедаи не имеют к этому никакого отношения.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-8169787011071335642010-05-03T11:31:30.980+04:002010-05-03T11:31:30.980+04:00Всё я врубилсо почитава твою статьтю "Шаманск...Всё я врубилсо почитава твою статьтю "Шаманский метод Geo":<br /><br />Дело в том, что с большой степенью вероятности Вам в проектировании формы потребуются компоненты, которые определены в том же юните, где и оригинальный компонент. Чтобы использовался именно модифицированный компонент, нужно грамотно задать порядок подключаемых юнитов в разделе uses. По правилам языка если в uses есть два модуля, содержащих одно и то же имя, то будет использован элемент из того модуля, который в списке uses указан позже. Меняя порядок юнитов в uses, можно получать нужную комбинацию оригинальных и модифицированных компонент в форме. Однако все равно сохраняется ограничение, что в одной форме невозможно использовать и оригинальный компонент, и его модификацию.stokitohttps://www.blogger.com/profile/12691568036832912137noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-40348554234730218912010-05-03T11:27:50.517+04:002010-05-03T11:27:50.517+04:00Ну вот, чтож ты не сказал что Encoding выдран из д...Ну вот, чтож ты не сказал что Encoding выдран из джедая.<br />Кстати ты переопределил TStringList а как делфи определит какой TStringList я имею в виду если подключано сразу два модуля: Clasess и StringListUnicodeSupport?stokitohttps://www.blogger.com/profile/12691568036832912137noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-35404577041200159182010-05-03T11:14:45.574+04:002010-05-03T11:14:45.574+04:00О кул, спасибо. Как раз недавно на работе столкнул...О кул, спасибо. Как раз недавно на работе столкнулся с такой проблемой.stokitohttps://www.blogger.com/profile/12691568036832912137noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-63773652316656945882010-05-01T10:48:32.928+04:002010-05-01T10:48:32.928+04:00Эммм... а что такое? :)
Если вопрос про авторство...Эммм... а что такое? :)<br /><br />Если вопрос про авторство - то это мой код, который <a href="http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=76783" rel="nofollow">я недавно написал в качестве ответа на вопрос Круглого Стола на DelphiKingdom</a>.<br /><br />Если вопрос про то, можно ли это выкладывать/модифицировать - делайте что угодно. При перепубликации буду благодарен за ссылку на источник, вот и всё, пожалуй.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.com