Текущий архив: 2013.07.07;
Скачать: CL | DM;
Вниз
TStringList.LoadFromFile. Как автоматически определить кодировку? Найти похожие ветки
← →
Дмитрий Белькевич (2010-04-07 16:16) [0]Файлы могут быть или ansi или utf-16. Указываю для юникода TEncoding.Unicode, тогда грузится нормально юникод, не грузится анси. Не указываю - наоборот. Можно ли TStringList"у передать какой-то параметр, что бы он сам определил, что за файл пытаются в него загрузить?
← →
~AQUARIUS~ © (2010-04-07 18:25) [1]Если в файле есть utf-сигнатура - не передавайте ничего, TStringList сам опеределит кодировку. Если нет - тогда в общем случае кодировку определить нельзя никак.
← →
Игорь Шевченко © (2010-04-07 19:06) [2]IsTextUnicode не ?
← →
Anatoly Podgoretsky © (2010-04-07 20:42) [3]
> Файлы могут быть или ansi или utf-16. Указываю для юникода
> TEncoding.Unicode, тогда грузится нормально юникод, не грузится
> анси. Не указываю - наоборот. Можно ли TStringList"у передать
> какой-то параметр, что бы он сам определил, что за файл
> пытаются в него загрузить?
Файлы еще могут быть и utf-8
Не передавать ничего означает кодировку по умолчанию, для D2010 это равносильно указанию Юникод.
~AQUARIUS~ тут пишет про сигнатуры, это надо проверить.
Но есть еще решение, это отказаться от LoadFromFile и грузить самому, второе самостоятельно определить сигнатуру, далее указать правильный encoding. Насчет IsTextUnicode не уверен насчет правильности данного решения, с учетом трех возможных форматов. И самое плохое, а что делать с ANSI там же множество кодировок.
← →
Дмитрий Белькевич (2010-04-07 21:11) [4]
> IsTextUnicode не ?
Ну если никак иначе. Была надежда из связки TStringList/TEncoding выжать.
> Файлы еще могут быть и utf-8
Уточняю. Случай не общий. Файлы могут быть или utf16 или ansi win1251.
← →
Игорь Шевченко © (2010-04-07 21:40) [5]Дмитрий Белькевич (07.04.10 21:11) [4]
Я б прочитал первые N (например 16) байт и посмотрел бы байты на меньше 10. Если встретились - Unicode
← →
Loginov Dmitry © (2010-04-07 22:45) [6]
> Ну если никак иначе. Была надежда из связки TStringList/TEncoding
> выжать.
Сигнатура (BOM) имеется в файле?
Если имеется, тогда [1] поможет.
← →
Дмитрий Белькевич (2010-04-07 22:46) [7]Спасибо, видимо готового решения нет. Попробую потомок TEncoding сделать, что бы он сразу возвращал нужную кодировку. Или своё что-то такое же.
← →
Дмитрий Белькевич (2010-04-07 22:48) [8]
> Сигнатура (BOM) имеется в файле?
Нет. Видимо, поэтому TStringList и не определяет автоматом кодировку.
← →
Игорь Шевченко © (2010-04-07 22:49) [9]Дмитрий Белькевич (07.04.10 22:46) [7]
У тебя язык-то какой ? В смысле данные из каких кодовых страниц ?
← →
Дмитрий Белькевич (2010-04-08 00:05) [10]
> У тебя язык-то какой ? В смысле данные из каких кодовых
> страниц ?
Русский.
← →
Игорь Шевченко © (2010-04-08 00:24) [11]Дмитрий Белькевич (08.04.10 00:05) [10]
Тогда [5]
← →
Германн © (2010-04-08 01:00) [12]
> Игорь Шевченко © (08.04.10 00:24) [11]
А #9 ?
← →
Anatoly Podgoretsky © (2010-04-08 01:07) [13]> Германн (08.04.2010 01:00:12) [12]
Для русского наличие кодов $04
← →
Германн © (2010-04-08 01:16) [14]
> Anatoly Podgoretsky © (08.04.10 01:07) [13]
Я про
> посмотрел бы байты на меньше 10. Если встретились - Unicode
А символ табуляции?
← →
Anatoly Podgoretsky © (2010-04-08 07:35) [15]> Германн (08.04.2010 01:16:14) [14]
А символ табуляции более $04
Решение только для ряда языков, поскольку есть неотличимые по кодировкам
← →
Anatoly Podgoretsky © (2010-04-08 07:37) [16]С учетом этого
> Файлы могут быть или utf16 или ansi win1251.
Пойдет предложение
> IsTextUnicode
← →
Дмитрий Белькевич (2010-04-08 21:39) [17]Договорились, что юникодовые файлы будут обязательно с юникодовой сигнатурой. Все проблемы сняты. Работает, как ~AQUARIUS~ говорил. Стринглист сам определяет кодировку.
← →
имя (2011-07-07 17:26) [18]Удалено модератором
Страницы: 1 вся ветка
Текущий архив: 2013.07.07;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.007 c