Главная страница
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.007 c
1-1308294107
abwabw
2011-06-17 11:01
2013.07.07
Как изменить размер кнопок у ScrollBar-а?


15-1361355483
валера
2013-02-20 14:18
2013.07.07
Помогите с RegExp ом


2-1353085510
G-leb
2012-11-16 21:05
2013.07.07
масивчик (


1-1307003218
Сергей из Самары
2011-06-02 12:26
2013.07.07
Блокировка запущенной программы из программы


2-1352981138
Anariem
2012-11-15 16:05
2013.07.07
Timer