Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TStringList.LoadFromFile. Как автоматически определить кодировку?


Дмитрий Белькевич ©   (2010-04-07 16:16:00) 

Файлы могут быть или ansi или utf-16. Указываю для юникода TEncoding.Unicode, тогда грузится нормально юникод, не грузится анси. Не указываю - наоборот. Можно ли TStringList'у передать какой-то параметр, что бы он сам определил, что за файл пытаются в него загрузить?


  (2011-07-07 17:26:00) [1]

Удалено модератором


Дмитрий Белькевич   (2010-04-08 21:39:00) [2]

Договорились, что юникодовые файлы будут обязательно с юникодовой сигнатурой. Все проблемы сняты. Работает, как ~AQUARIUS~ говорил. Стринглист сам определяет кодировку.


Anatoly Podgoretsky   (2010-04-08 07:37:00) [3]

С учетом этого

> Файлы могут быть или utf16 или ansi win1251.

Пойдет предложение

> IsTextUnicode


Anatoly Podgoretsky   (2010-04-08 07:35:00) [4]

> Германн  (08.04.2010 01:16:14)  [14]

А символ табуляции более $04
Решение только для ряда языков, поскольку есть неотличимые по кодировкам


Германн   (2010-04-08 01:16:00) [5]


> Anatoly Podgoretsky ©   (08.04.10 01:07) [13]

Я про
> посмотрел бы байты на меньше 10. Если встретились - Unicode

А символ табуляции?


Anatoly Podgoretsky   (2010-04-08 01:07:00) [6]

> Германн  (08.04.2010 01:00:12)  [12]

Для русского наличие кодов $04


Германн   (2010-04-08 01:00:00) [7]


> Игорь Шевченко ©   (08.04.10 00:24) [11]

А #9 ?


Игорь Шевченко   (2010-04-08 00:24:00) [8]

Дмитрий Белькевич   (08.04.10 00:05) [10]

Тогда [5]


Дмитрий Белькевич   (2010-04-08 00:05:00) [9]


> У тебя язык-то какой ? В смысле данные из каких кодовых
> страниц ?


Русский.


Игорь Шевченко   (2010-04-07 22:49:00) [10]

Дмитрий Белькевич   (07.04.10 22:46) [7]

У тебя язык-то какой ? В смысле данные из каких кодовых страниц ?


Дмитрий Белькевич   (2010-04-07 22:48:00) [11]


> Сигнатура (BOM) имеется в файле?


Нет. Видимо, поэтому TStringList и не определяет автоматом кодировку.


Дмитрий Белькевич   (2010-04-07 22:46:00) [12]

Спасибо, видимо готового решения нет. Попробую потомок TEncoding сделать, что бы он сразу возвращал нужную кодировку. Или своё что-то такое же.


Loginov Dmitry   (2010-04-07 22:45:00) [13]


> Ну если никак иначе. Была надежда из связки TStringList/TEncoding
> выжать.


Сигнатура (BOM) имеется в файле?
Если имеется, тогда [1] поможет.


Игорь Шевченко   (2010-04-07 21:40:00) [14]

Дмитрий Белькевич   (07.04.10 21:11) [4]

Я б прочитал первые N (например 16) байт и посмотрел бы байты на меньше 10. Если встретились - Unicode


Дмитрий Белькевич   (2010-04-07 21:11:00) [15]


> IsTextUnicode не ?


Ну если никак иначе. Была надежда из связки TStringList/TEncoding выжать.


> Файлы еще могут быть и utf-8


Уточняю. Случай не общий. Файлы могут быть или utf16 или ansi win1251.


Anatoly Podgoretsky   (2010-04-07 20:42:00) [16]


> Файлы могут быть или ansi или utf-16. Указываю для юникода
> TEncoding.Unicode, тогда грузится нормально юникод, не грузится
> анси. Не указываю - наоборот. Можно ли TStringList'у передать
> какой-то параметр, что бы он сам определил, что за файл
> пытаются в него загрузить?

Файлы еще могут быть и utf-8
Не передавать ничего означает кодировку по умолчанию, для D2010 это равносильно указанию Юникод.
~AQUARIUS~ тут пишет про сигнатуры, это надо проверить.
Но есть еще решение, это отказаться от LoadFromFile и грузить самому, второе самостоятельно определить сигнатуру, далее указать правильный encoding. Насчет IsTextUnicode не уверен насчет правильности данного решения, с учетом трех возможных форматов. И самое плохое, а что делать с ANSI там же множество кодировок.


Игорь Шевченко   (2010-04-07 19:06:00) [17]

IsTextUnicode не ?


~AQUARIUS~   (2010-04-07 18:25:00) [18]

Если в файле есть utf-сигнатура - не передавайте ничего, TStringList сам опеределит кодировку. Если нет - тогда в общем случае кодировку определить нельзя никак.


Наверх

Титульная страница Поиск, карта сайта Написать письмо