Имя: Пароль:
1C
1C 7.7
v7: Перекодировка XML файла
, ,
0 vova1122
 
18.02.14
18:37
Существуют утилиты для перекодировки с utf8 на windows-1251 и обратно
utf8_1251.exe  и  win1251_utf8.exe. Только мне они не помогли.  
Опишу ситуацию
И так есть XML-файл в заголовке которого прописано <?xml version="1.0" encoding="utf-8"?>.
Пробовал поменять кодировку на windows-1251 вышеуказанной утилитой. В итоге в заголовке ничего не поменялось, а строки с кирилецей испарились.

Когда читаю XML файл (при UTF-8) появляется ошибка : {D:\MAIL\XML_IMPORT.ERT(38)}: : An invalid character was found in text content.
[ <desc>Nomrt (error position = 20)]

Когда вручную в XML файлt  поменяю заголовок с UTF-8 на windows-1251, тогда все прекрасно читается (и строки не пропадают)

Собственно вопрос: как програмно поменять заголовок в XML файле с UTF-8 на windows-1251
1 Torquader
 
18.02.14
18:42
Если "кто-то умный" записал в заголовке utf-8, а внутри строки в Windows-1251, то это не проблемы того, кто читает - это задача - объяснить тому, кто пишет, что он "чудак".
2 Рэйв
 
18.02.14
18:43
(1)+1
3 Fram
 
18.02.14
18:49
(0) Открыть как текст в кодировке windows-1251 и поменять "utf-8" на "windows-1251"
4 vova1122
 
18.02.14
18:55
(1) глухой номер. Присылают нам такой файл, и говорят что так должно быть, и никак иначе.
(3) прочесть как текстовый файл. Сделать замену в заголовке и записать как текст с расширением XML? Я правильно понял?
5 Fram
 
18.02.14
18:57
(4) Да
6 Wobland
 
18.02.14
18:57
я тебе по секрету скажу. хмл - тот же текстовый файл
7 Torquader
 
18.02.14
18:58
У вас семёрка ?
Можно вообще как текст читать и не думать ни о какой кодировке в заголовке - только структуру придётся самому разбирать.
8 vova1122
 
18.02.14
18:58
(5) (6) спасибо, я так и думал делать. Но решил переспросить, вдруг может имеется другое решение
9 Torquader
 
18.02.14
19:00
т=СоздатьОбъект("Текст");
т.Прочитать(НашФайл);
т.ЗаменитьСтроку(1,"<?xml version=""1.0"" encoding=""windows-1251""?>");
т.Записать(НашФайл);
т=0;
10 vova1122
 
18.02.14
19:00
(7) да 7.7. очень много телодвижений....
11 vova1122
 
18.02.14
19:07
(9) спасибо, но на семерке немного по другому этот код пишется. но сть понятна
12 Fram
 
18.02.14
19:09
(11) это вроде был семерочный код ))
13 Torquader
 
18.02.14
19:10
(12) Ну, может быть, автор в семёрке объекта "Текст" не нашёл - просто, когда файл большой - все рекомендуют Ole.Object - Scripting.FileSystemObject
14 vova1122
 
18.02.14
19:14
(12)(13) Я о "Прочитать" - это меня смутило. В семерке "Открыть"
15 Torquader
 
18.02.14
19:15
(14) Ну перепутал - бывает.
16 vova1122
 
18.02.14
19:17
вообщем спасибо. придется всетаки делать этот ход конем. иначе никак....
17 Torquader
 
18.02.14
19:19
(16) Ну, если кто-то там сделал "ход козлом" - то придётся и "ход конём" делать.
18 Eugene_life
 
18.02.14
19:28
(0) А, может, тупо перезаписывать файл с изменением кодировки? Все же стремно из-за несовпадения заголовка и тела переписывать чтение XML на чтение текста.
19 Torquader
 
18.02.14
19:30
(18) Мы уже, вроде как, это сделали.
Только вот, насколько я помню, у семёрки с чтением xml как-то не очень.
20 spectre1978
 
18.02.14
19:47
(13) есть нюанс. XML - он, конечно, текстовый, только разделители строк в нем вовсе не обязаны быть. Парсеры сплошь и рядом записывают XML файлы без разделителей. Объект "Текст" в семерке без проблем поймет файл с одной строчкой весом много мегабайт?
21 Torquader
 
18.02.14
19:50
(20) Объект Текст вообще файл в несколько сот мегабайт уже переваривает с трудом, вне зависимости от разделителей в нём.
22 spectre1978
 
18.02.14
19:55
(20) Если он его сразу целиком в память зачитывает, то естественно. Фаровским редактором (по F4) текстовый файл в десятки мегабайт тоже чувствительно открывать. Задумывается.
23 spectre1978
 
18.02.14
19:56
к (21)
24 Torquader
 
18.02.14
20:00
(22) Таки задумывается - падает - я бы сказал.
Но, Scripting.TextStream переваривает файлы любой длины, причём без каких-либо проблем.
(Хотя, надо пробовать превысить число long по числу строк в файле - возможно - лажанёт).
25 spectre1978
 
18.02.14
20:07
(18) попробовал, не прокатывает. Строки корежатся, скорее всего, в момент чтения парсером, как будешь записывать - значение уже не имеет. Похоже что вариант с заменой кодировки средствами чтения-записи файлов - единственный.