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

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

Задание кодировки для xml [D7, XP]


mr.devil ©   (2009-02-02 23:45:00) 

Здравствуте.
Есть xml-файл, в котором указана кодировка " ISO-8859-1" ( <?xml version='1.0' encoding='ISO-8859-1' ?>), хотя текст там в кодировке " windows-1252". Я в своей прграмме загружаю этот документ в компонент TXMLDocumentфункцией LoadFromFile. Вместо русских символов, естственно, получется "бяка" =)
Можно ли в TXMLDocument задать кодировку в которой он будет воспринимать загружаемый функцией LoadFromFile файл?


...
// где-то тут указать в какой кодировке будет файл
XMLDocument1.LoadFromFile(OpenDialog1.FileName);
...


Медвежонок Пятачок   (2009-02-03 17:01:00) [1]

Я не хочу файл на диске перезаписывать )

А его и не надо перезаписывать.


Mr.Devil   (2009-02-03 16:55:00) [2]


> Eraser ©   (03.02.09 15:20) [15]

Спасибо, буду вечером пробовать =)


Eraser   (2009-02-03 15:20:00) [3]

> [14] Mr.Devil ©   (03.02.09 14:50)


> Файлы бывают от 4 до 100 МБ.

ну это не толстые, [9] вполне подойдет.


Mr.Devil   (2009-02-03 14:50:00) [4]


> Eraser ©   (03.02.09 00:40) [8]

Это про кодировку =)
http://ru.wikipedia.org/wiki/ISO-8859-1
Файлы бывают от 4 до 100 МБ.

> sniknik ©   (03.02.09 00:43) [9]

Спасибо попробую.

> Медвежонок Пятачок ©   (03.02.09 12:07) [12]

А чего Вы такой злобный? ;) Я не хочу файл на диске перезаписывать )


Медвежонок Пятачок   (2009-02-03 12:08:00) [5]

причем после правки даже на диск сохранять не надо.


Медвежонок Пятачок   (2009-02-03 12:07:00) [6]

Если я попытаюсь прочитать строку из файла ReadLn'ом, а потом записать, не попытается он весь файл в память загрузить? Файлы довольно толстые...

А типа если бы с кодировкой было бы ок, то тебе было бы неважно, что TXMLDocument загрузил все в память.

А тут, как надо подправить строчку, то сразу резко стало важно.


clickmaker   (2009-02-03 12:03:00) [7]

windows-1252 это разве не западная европа?


Denis__   (2009-02-03 11:39:00) [8]


> StringList[0]:= '<?xml version=''1.0'' encoding=''windows-
> 1252'' ?>';XMLDocument1.XML.Text:= StringList.Text;вариант
> без проверок, без учета того что весь хмл может быть в одну
> строку... чисто для примера.

У него же файлы "толстые";)


sniknik   (2009-02-03 00:43:00) [9]

> Если написать так:
>    XMLDocument1.Encoding:='windows-1252';
>    XMLDocument1.LoadFromFile(OpenDialog1.FileName);
> То это не помогает.

StringList.LoadFromFile(OpenDialog1.FileName);
StringList[0]:= '<?xml version=''1.0'' encoding=''windows-1252'' ?>';
XMLDocument1.XML.Text:= StringList.Text;

вариант без проверок, без учета того что весь хмл может быть в одну строку... чисто для примера.


Eraser   (2009-02-03 00:40:00) [10]

> [7] Mr.Devil ©   (03.02.09 00:34)

если файлы толстые, то это проблема, т.к. ISO-8859-1 короче, чем windows-1252. можно попробовать вообще
encoding='ISO-8859-1'
заменять на пробелы (удобнее через TFileStream), а потом положиться на автоматику, но надо эксперементировать.
вообще на сколько толстые файлы?


Mr.Devil   (2009-02-03 00:34:00) [11]

Если я попытаюсь прочитать строку из файла ReadLn'ом, а потом записать, не попытается он весь файл в память загрузить? Файлы довольно толстые...


Eraser   (2009-02-03 00:26:00) [12]

> [5] Mr.Devil ©   (03.02.09 00:23)

а в чем сложность автоматизации? ) трудно открыть файл, найти там в первой строке encoding='ISO-8859-1' и заменить на нужную? )


Mr.Devil   (2009-02-03 00:23:00) [13]

Я сейчас так и делаю, но делать это приходится часто. Хотелось бы как-то автоматизироать этот процесс )


Eraser   (2009-02-03 00:20:00) [14]

> [2] Mr.Devil ©   (03.02.09 00:02)


> Где править? В самом файле?

да именно в файле. вручную.


Mr.Devil   (2009-02-03 00:19:00) [15]

Если написать так:

   XMLDocument1.Encoding:='windows-1252';
   XMLDocument1.LoadFromFile(OpenDialog1.FileName);

То это не помогает. После LoadFromFile все настройки игнорируются =( Если сделать так:

   XMLDocument1.LoadFromFile(OpenDialog1.FileName);
   XMLDocument1.Encoding:='windows-1252';

То на загруженные значения это не влияет...


Mr.Devil   (2009-02-03 00:02:00) [16]


> во-первых, нужно подправить программу, создающую XML, чтобы
> не было так, что написано одно, а по-факту - другое.

xml делаю не я и мне на мой протест ответили, что им так удобнее и у них все работает )

> во-вторых проще править атрибут encoding непосредственно
> перед загрузкой.

Где править? В самом файле? XMLDocument1 до загрузки =nil )


Eraser   (2009-02-02 23:55:00) [17]

> [0] mr.devil   (02.02.09 23:45)

во-первых, нужно подправить программу, создающую XML, чтобы не было так, что написано одно, а по-факту - другое.
во-вторых проще править атрибут encoding непосредственно перед загрузкой.


Наверх

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