IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   xml (https://www.imho.ws/showthread.php?t=90944)

andrei solovjev 13.08.2005 22:18

xml
 
Имеется огромный файл file.xml. Я не очень хорошо знаю эту технологию. Допустим при открытии файла есть строка
<name>на складе</name>
при открытии в блокноте, строка выглядит так, как показано выше. Потом я копирую файл средствами Delphi (открытие file.xml, занесение всех строк в массив, запись массива в file.txt). В новом файле строка выглядит как
<name>на складе</name>
Т.е. русский текст не отображается! Как это исправить???

RaZEr 13.08.2005 22:21

Нужно перекодировать из UTF-8 в Windows-1251

andrei solovjev 13.08.2005 23:26

RaZEr:
А как это сделать?

RaZEr 13.08.2005 23:39

В нотепаде "save as".

andrei solovjev 14.08.2005 10:12

Файл занимает более 40 Мб, нотепад просто зависает...

RaZEr 14.08.2005 15:56

Надо подождать. Или поставить другой редактор. Например ultraedit. Или даже консольную iconv.

andrei solovjev 14.08.2005 18:03

Благодарю, Bred 2 мне помог.

PSyton 15.08.2005 10:41

Програмисты блин, не в обиду будет сказано.
А средствами Delphi конвертировать не пробовал?

andrei solovjev 15.08.2005 11:12

pvs, буду очень благодарен, если подскажешь как это сделать...

PSyton 15.08.2005 18:32

Я сам-то на C++ пишу и Delphi для меня это что-то далекое, далекое...
Потому как это средствами VCL не скажу. Но путей несколько на самом деле.

1. WideCharToMultiByte - из юникода в простой char
MultiByteToWideChar - Обратно в Unicode
Это функции WinAPI и их описание найти я думаю не сложно.

2. Можно просто поискать таблицу соотвествия Unicode, как я понял UTF8 кодировке windows-1251 и используюя эту таблицу написать собственную функцию перекодировки.

Примерно в таком ключе. Надеюсь поможет.

pusto 16.08.2005 09:38

Я пользуюсь плагином к FAR'у - CPtoCP. Отлично конвертирует UTF-8 -> Win1251.
Правда, ограничения на объем файлов не знаю - конвертирую только небольшие файлы.

UriF 24.08.2005 21:31

Я читаю в VB6 методами (не знаю, как в русских терминах) file mapping/memory mapping kernel.dll API. Копирую, допустим, 100 Kb, читаю, затем следующие 100 Kb (pointer к 101-му, 201-му и т.д. килобайту, и, наконец, к хвосту). Если интересует, могу выложить или выслать

Уточнение: открывается не сам файл, а читается кусок скоприваннной памяти, как текстовая переменная

Bishop 25.08.2005 21:48

_http://www.megalib.com/books/923/1315.htm

Модуль uCodePageConverter для перекодировки и пример использования. Никаких таблиц преобразования, все средствами Windows.

Добавь в модуль строку (в объявлении констант) CODEPAGE_UTF_8: tagCODEPAGE = 65001;
Затем в программе
строка инициализации:
Conv.Initialize(CODEPAGE_UTF_8, CODEPAGE_Windows_31_Cyrillic, MLCONVCHARF_ENTITIZE);
а сама перекодировка:
Conv.DoConversion(Source, @SourceSize, Dest, @DestSize);
остальное как в примере.

YaHooka 30.08.2005 19:19

Сколько писал фенечки с XML всегда MS XML Parser использовал - проблем с перекодировкой не было, и код потом приятно читать! Рекомендую.

PSyton 31.08.2005 08:23

YaHooka
Слишком уж он MS-зависимый посмотрел бы я на тебя с ним по Linux или MAcOS. :p

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


Часовой пояс GMT +4, время: 08:08.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.