Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.006 c
15-1361224437
Германн
2013-02-19 01:53
2013.07.07
Компьютер с Win7 ни с того ни с сего, вдруг, отказывается спать.


15-1361424406
MBo
2013-02-21 09:26
2013.07.07
О последних версиях Delphi...


15-1361424251
Savek
2013-02-21 09:24
2013.07.07
Кто сказал, что Delphi только для баз данных?


15-1361392203
Юрий
2013-02-21 00:30
2013.07.07
С днем рождения ! 21 февраля 2013 четверг


1-1270642600
Дмитрий Белькевич
2010-04-07 16:16
2013.07.07
TStringList.LoadFromFile. Как автоматически определить кодировку?