![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 сам опеределит кодировку. Если нет - тогда в общем случае кодировку определить нельзя никак.