![]() |
xml
Имеется огромный файл file.xml. Я не очень хорошо знаю эту технологию. Допустим при открытии файла есть строка
<name>на складе</name> при открытии в блокноте, строка выглядит так, как показано выше. Потом я копирую файл средствами Delphi (открытие file.xml, занесение всех строк в массив, запись массива в file.txt). В новом файле строка выглядит как <name>РЅР° складе</name> Т.е. русский текст не отображается! Как это исправить??? |
Нужно перекодировать из UTF-8 в Windows-1251
|
RaZEr:
А как это сделать? |
В нотепаде "save as".
|
Файл занимает более 40 Мб, нотепад просто зависает...
|
Надо подождать. Или поставить другой редактор. Например ultraedit. Или даже консольную iconv.
|
Благодарю, Bred 2 мне помог.
|
Програмисты блин, не в обиду будет сказано.
А средствами Delphi конвертировать не пробовал? |
pvs, буду очень благодарен, если подскажешь как это сделать...
|
Я сам-то на C++ пишу и Delphi для меня это что-то далекое, далекое...
Потому как это средствами VCL не скажу. Но путей несколько на самом деле. 1. WideCharToMultiByte - из юникода в простой char MultiByteToWideChar - Обратно в Unicode Это функции WinAPI и их описание найти я думаю не сложно. 2. Можно просто поискать таблицу соотвествия Unicode, как я понял UTF8 кодировке windows-1251 и используюя эту таблицу написать собственную функцию перекодировки. Примерно в таком ключе. Надеюсь поможет. |
Я пользуюсь плагином к FAR'у - CPtoCP. Отлично конвертирует UTF-8 -> Win1251.
Правда, ограничения на объем файлов не знаю - конвертирую только небольшие файлы. |
Я читаю в VB6 методами (не знаю, как в русских терминах) file mapping/memory mapping kernel.dll API. Копирую, допустим, 100 Kb, читаю, затем следующие 100 Kb (pointer к 101-му, 201-му и т.д. килобайту, и, наконец, к хвосту). Если интересует, могу выложить или выслать
Уточнение: открывается не сам файл, а читается кусок скоприваннной памяти, как текстовая переменная |
_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); остальное как в примере. |
Сколько писал фенечки с XML всегда MS XML Parser использовал - проблем с перекодировкой не было, и код потом приятно читать! Рекомендую.
|
YaHooka
Слишком уж он MS-зависимый посмотрел бы я на тебя с ним по Linux или MAcOS. :p К тому же человек видимо уже разобрался, что к чему, раз не пишет больше. |
| Часовой пояс GMT +4, время: 08:08. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.