|
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) попробовал, не прокатывает. Строки корежатся, скорее всего, в момент чтения парсером, как будешь записывать - значение уже не имеет. Похоже что вариант с заменой кодировки средствами чтения-записи файлов - единственный.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |