Загрузите файл с кодировкой windows 1251 xml

✅ Проверьте ваши XML-файлы на соответствие формату. Проверка ХМЛ с помощью программы CheckXML бесплатно, без регистрации, онлайн на сайте Диадока!

Файл поврежден или ФНС не регламентирует этот формат

Мы не можем распознать и проверить этот файл. К нерегламентируемым форматам относятся протокол согласования цен, реестр сертификатов и документы в произвольном формате.

Неверный формат файла

Загрузите файл в формате .xml

Неверная кодировка файла

Загрузите файл с кодировкой windows-1251

Невозможно определить тип xml-файла

В файле необходимо добавить атрибут «КНД». Значение атрибута зависит от типа документа:

для УПД

Титул продавца 1115131
Титул покупателя 1115126

для УКД

Титул продавца 1115127
Титул покупателя 1115128
Корректировочный счёт-фактура 1115108

для акта

Титул исполнителя 1175006
Титул заказчика 1175007

для Торг-12

Титул отправителя 1175004
Титул получателя 1175005
Извещение о получении электронного документа 1115110
Уведомление об уточнении электронного документа 1115113

Если вам нужна помощь при написании XML-файлов, подключайтесь к Диадоку и мы проведем интеграцию с вашей учетной системой

Подключиться

Здравствуйте, господа!

Честно говоря, не знаю, кому может пригодиться …

Мне надо было генерировать (для заказчика) и читать (от заказчика) XML в кодовой таблице Window-1251.

1. Опишем русскую кодировку в CPXML.Inc

Код: Выделить всё

XMLEnc               EQUATE(STRING)
XMLEnc:UTF8          EQUATE('UTF-8')
XMLEnc:UTF16         EQUATE('UTF-16')
XMLEnc:ISO88591      EQUATE('ISO-8859-1')
XMLEnc:WIN1251       EQUATE('WINDOWS-1251')

2. И заставим выводить данные в windows-1251 (CpXML.clw)

DOMToXMLFile procedure(*Document doc, string path, <*CSTRING newLine>, UNSIGNED Format = Format:AS_IS)

Код: Выделить всё

ret         BYTE
            CODE
            IF omitted(3)
                !ret=DOMToXMLFile(doc,path,,Format,XMLEnc:UTF8)
                ret=DOMToXMLFile(doc,path,,Format,XMLEnc:WIN1251)
            ELSE
                !ret=DOMToXMLFile(doc,path,newLine,Format,XMLEnc:UTF8)
                ret=DOMToXMLFile(doc,path,newLine,Format,XMLEnc:WIN1251)
            END
            RETURN ret

3. После чего получим XML-файл (например, в ExampleXMLParse) в кодировке Windows-1251, вполне отображаемый браузером. Но встаёт другая проблема — эти файлы не читаются кларионовским парсером (Шаблон ‘View XML File’ просто падает при загрузке). Ну что ж, тем хуже для парсера. Возьмём шестнадцатеричный редактор, найдём в модуле C60cpxml.dll текст ‘ISO-8859-1’, заменим на ‘WINDOWS-1251’ и добавим в конец ‘<0>’ .

4. Вопрос с документами в UTF-8 не рассматривается :(

—————————————
C уважением,
Юрий Философов,
Главный программист
Корпорация «Диполь», Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439

(Добавление)

Когда-то мне пришлось более плотнее исследовать C6 XML Support. Сделал точно такие же изменения как Вы.

3. После чего получим XML-файл (например, в ExampleXMLParse) в кодировке Windows-1251, вполне отображаемый браузером.

Когда получил этот результат — обрадовался. Но попробовал, используя их классы создать свой XML, и очень разочаровался. Оказывается, классы напрочь отказываются работать с русскими тегами.

Но встаёт другая проблема — эти файлы не читаются кларионовским парсером (Шаблон ‘View XML File’ просто падает при загрузке). Ну >что ж, тем хуже для парсера.

Может проблема в кодовой странице, о которой писал Сергей Артюшенков.

Возьмём шестнадцатеричный редактор, найдём в модуле C60cpxml.dll текст ‘ISO-8859-1’, заменим на ‘WINDOWS-1251’ и добавим в конец ‘<0>’ .

Я не понял, тогда в этом случае все O’K, что ли?

С уважением, Семен Попов

Когда получил этот результат — обрадовался. Но попробовал, используя их классы создать свой XML, и очень разочаровался. Оказывается, классы напрочь отказываются работать с русскими тегами.

Пофиксил. Теперь работают :)

Когда получил этот результат — обрадовался. Но попробовал, используя их классы создать свой XML, и очень разочаровался. Оказывается, классы напрочь отказываются работать с русскими тегами.

А за это отвечает процедура CheckXMLName из CpXML.clw . Можно поставить в первую строку Return(0) — и будут приниматься любые теги :)

—————————————
C уважением,
Юрий Философов

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

С уважением, Семен Попов

Когда-то мне пришлось более плотнее исследовать C6 XML Support. Сделал точно такие же изменения как Вы.

Это естественно. Но сгенерированные файлы не читались через Support. Потратил время, чтобы понять причину и добить, как заставить их читаться. О чём и рассказал :)

Я не понял, тогда в этом случае все O’K, что ли?

По крайней мере, файлы, созданные обычным текстовым редактором или сформированные программой (в том числе без использования интерфейса) читаются, только и всего. Просто похоже, что используемая библиотека в принципе не поддерживает кодировок, отличных от буржуинских, а это самый простой путь заставить это делать…

… исправленные модули для CW6.1 на http://www.tacis-dipol.ru/fil/XML1251.zip

—————————————
C уважением,
Юрий Философов
Написал: ClaList(2)

  Skillbox: Профессия 1С-разработчик  

Как сделать выгрузку в xml в кодировке «windows-1251» ?

Я
   malton

03.07.07 — 20:10

всем хай! Столкнулся проблемой. Решила контора торговать через инет и заказала разработку инет-магазина. Фирма, которая будет мастерить и поддерживать все это дело требует категорически выгрузку из базы рисовать в формате «windows-1251». А как? если по синтаксису можна создать xml-файл тока в юникоде(«UTF-16″,»UTF-8»). Причем эти крендели заявляют что ос unix такая умная, что ANSI только и понимает, а юникод не переваривает, мол это жуткий анахронизм.

Пытался при создании файла выгрузки указать кодировку «windows-1251»

объектXML.ОткрытьФайл(Имяфайла, «windows-1251″) — не прокатило. В объявлении файла исчезает атрибут ‘encoding'(вместо <?xml version=»1.0″ encoding=»UTF-8″?>  становится <?xml version=»1.0» ?>)

   Оллрайт

1 — 03.07.07 — 20:33

v8: Файл не содержит маркера кодировки UTF8
в этой веточке предлагали уже решение

   Оллрайт

2 — 03.07.07 — 20:36

Книга знаний: Перекодировщик из UTF-8 в Windows-1251
Книга знаний: Перекодировщик из UTF-8 в Windows-1251 и обратно

Romix говорит:
«Перекодирует XML-файл из кодировки Windows-1251 в UTF8.
Если файл уже в кодировке UTF8, то он остается как есть.
Если файл не содержит маркера кодировки UTF8, то добавляет его.

Вызов win1251_utf8.exe Файл1.xml Файл2.xml»

  

malton

3 — 03.07.07 — 21:07

Большое спасибо! выкачал перекодировщик и вот рабочий вариант(все файлы по умолчанию в каталоге бд).

ОбъектXML = Новый ЗаписьXML;
ОбъектXML.ОткрытьФайл(ИмяФайлаXML, «UTF-8»);
ОбъектXML.ЗаписатьОбъявлениеXML();
ОбъектXML.ЗаписатьНачалоЭлемента(«КоммерческаяИнформация»);
ОбъектXML.ЗаписатьКонецЭлемента();
ОбъектXML.Закрыть();          
КомандаСистемы(«utf8_1251.exe «+СокрЛП(ИмяФайлаXML)+» fileVigruzki.xml»);

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

Dogarik

0 / 0 / 0

Регистрация: 21.04.2015

Сообщений: 35

1

05.12.2019, 15:47. Показов 7483. Ответов 5

Метки xml (Все метки)


Доброго времени суток. Столкнулся с проблемой. Не могу при создании XML файла сменить кодировку.

Суть задачи следующая. Есть список в TXT файле из которого необходимо создать XML определенной структуры с кодировкой «Windows-1251». Не знаю как при создании файла установить нужную мне кодировку. Все время устанавливается «utf-8».
Буду благодарен любому совету.

P.S. Работаю в VS2019.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
class Program
    {
        static void Main(string[] args)
        {
            List<HumanData> HumanList = new List<HumanData>();
            string PathLoadFile = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\List.txt";
            string FullFileName = "VALIDATION-REQ-50-OBR-01-001.XML";
            string PathSaveFile = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\" + FullFileName;
 
            using (StreamReader stroka = new StreamReader(PathLoadFile, Encoding.Default))
            {
                string str; int index = 0;
                while ((str = stroka.ReadLine()) != null)
                {
                    string[] Fullstroka = str.Split(new char[] { ';' });
                    HumanList.Add(new HumanData()
                    {
                        Id = index,
                        Snils = Fullstroka[0].ToUpper(),
                        Surname = Fullstroka[1].ToUpper(),
                        Name = Fullstroka[2].ToUpper(),
                        Patronymic = Fullstroka[3].ToUpper(),
                        Birthday = Fullstroka[4].ToUpper(),
                        Sex = Fullstroka[5].ToUpper()
                    });
                    index++;
                }
            }
 
            XDocument xdoc = new XDocument();
            XElement DataBlock = new XElement("ФайлПФР");
 
            XElement FileName = new XElement("ИмяФайла", FullFileName);
            DataBlock.Add(FileName);
            XElement CreateDate = new XElement("ДатаФормирования", DateTime.Now.ToString("dd.MM.yyyy").ToUpper());
            DataBlock.Add(CreateDate);
            XElement Version = new XElement("ВерсияФормата", "1.0");
            DataBlock.Add(Version);
            XElement FileType = new XElement("ТипФайла", "ВАЛИДАЦИЯ_ЗАПРОС");
            DataBlock.Add(FileType);
            XElement Count = new XElement("КоличествоЗаписейВфайле", HumanList.Count);
            DataBlock.Add(Count);
 
            foreach(var ASD in HumanList)
            {
                XElement Request = new XElement("Валидация_запрос");
                XElement Id = new XElement("ИдентификаторЗапроса", (ASD.Id + 1).ToString());
                XElement Snils = new XElement("СНИЛС", ASD.Snils);
                XElement Fam = new XElement("Фамилия", ASD.Surname);
                XElement Name = new XElement("Имя", ASD.Name);
                XElement Otch = new XElement("Отчество", ASD.Patronymic);
                XElement Birthday = new XElement("ДатаРождения", ASD.Birthday);
                XElement Sex = new XElement("Пол", ASD.Sex);
                Request.Add(Id); Request.Add(Snils); Request.Add(Fam); Request.Add(Name);
                Request.Add(Otch); Request.Add(Birthday); Request.Add(Sex);
                DataBlock.Add(Request);
            }
 
            xdoc.Add(DataBlock);
            xdoc.Save(PathSaveFile);
        }
 
        public class HumanData
        {
            public int Id { get; set; }
            public string Snils { get; set; }
            public string Surname { get; set; }
            public string Name { get; set; }
            public string Patronymic { get; set; }
            public string Birthday { get; set; }
            public string Sex { get; set; }
        }
    }

Миниатюры

Изменение кодировки создаваемого XML файла
 

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

05.12.2019, 15:47

5

92 / 62 / 31

Регистрация: 22.12.2018

Сообщений: 121

05.12.2019, 15:59

2

Dogarik, нет возможности проверить совет, но попробуйте так



1



Dogarik

0 / 0 / 0

Регистрация: 21.04.2015

Сообщений: 35

05.12.2019, 16:37

 [ТС]

3

К сожалению не помогло.
Сократил немного код, вставил

C#
1
new XDeclaration("1.0", "Windows-1251", "Yes")

но эффекта никакого….ну или я криворук…

Текущий код такой

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
XDocument xdoc = new XDocument(new XDeclaration("1.0", "Windows-1251", "Yes"));
            XElement DataBlock = new XElement("ФайлПФР",
                new XElement("ИмяФайла", FullFileName),
                new XElement("ДатаФормирования", DateTime.Now.ToString("dd.MM.yyyy").ToUpper()),
                new XElement("ВерсияФормата", "1.0"),
                new XElement("ТипФайла", "ВАЛИДАЦИЯ_ЗАПРОС"),
                new XElement("КоличествоЗаписейВфайле", HumanList.Count));
                                 
            foreach(var ASD in HumanList)
            {
                XElement Request = new XElement("Валидация_запрос",
                new XElement("ИдентификаторЗапроса", (ASD.Id + 1).ToString()),
                new XElement("СНИЛС", ASD.Snils),
                new XElement("Фамилия", ASD.Surname),
                new XElement("Имя", ASD.Name),
                new XElement("Отчество", ASD.Patronymic),
                new XElement("ДатаРождения", ASD.Birthday),
                new XElement("Пол", ASD.Sex));
                DataBlock.Add(Request);
            }
 
            xdoc.Add(DataBlock);
            xdoc.Save(PathSaveFile);

На выходе:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<ФайлПФР>
  <ИмяФайла>VALIDATION-REQ-50-OBR-01-001.XML</ИмяФайла>
  <ДатаФормирования>05.12.2019</ДатаФормирования>
  <ВерсияФормата>1.0</ВерсияФормата>
  <ТипФайла>ВАЛИДАЦИЯ_ЗАПРОС</ТипФайла>
  <КоличествоЗаписейВфайле>1555</КоличествоЗаписейВфайле>
  <Валидация_запрос>
    <ИдентификаторЗапроса>1</ИдентификаторЗапроса>
    <СНИЛС>ХХХ-ХХХ-ХХХ ХХ</СНИЛС>
    <Фамилия>�����</Фамилия>
    <Имя>�������</Имя>
    <Отчество>�������������</Отчество>
    <ДатаРождения>06.11.2012</ДатаРождения>
    <Пол></Пол>
  </Валидация_запрос>



0



dazering

92 / 62 / 31

Регистрация: 22.12.2018

Сообщений: 121

05.12.2019, 17:09

4

Лучший ответ Сообщение было отмечено Dogarik как решение

Решение

Dogarik, вот так надо декларировать =)

C#
1
XDocument xdoc = new XDocument(new XDeclaration("1.0", Encoding.GetEncoding("windows-1251").WebName, ""), new XElement("Root", "Content"));

Если на фрейморке, то ничего не надо делать. Если на коре, то надо добавить NuGet пакет System.Text.Encoding.CodePages и затем прописать

C#
1
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);



1



Ourn

68 / 38 / 11

Регистрация: 07.11.2019

Сообщений: 136

05.12.2019, 17:12

5

Не обещаю, что поможет, но можно попробовать сделать так

1. Устанавливаете nuget пакет System.Text.Encoding.CodePages — без него не будут доступны кодировки типа 1251.
2. Создаете кастомный StringWriter

C#
1
2
3
4
5
6
7
8
public sealed class WinStringWriter : StringWriter
{
    public WinStringWriter(StringBuilder builder)
        : base(builder)
    {
    }
    public override Encoding Encoding => Encoding.GetEncoding("windows-1251");
}

3. Привожу пример метода, который мне лень переделывать под запись в файл — его задача сформировать строку в нужной кодировке

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static string ToXmlString(XElement element)
{
    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); //стоит вынести в main
 
    var xmlWriterSettings = new XmlWriterSettings() 
    {
        Encoding = Encoding.GetEncoding("windows-1251")
    };
 
    var buffer = new StringBuilder();
    using (TextWriter output = new WinStringWriter(buffer))
    using (XmlWriter writer = XmlWriter.Create(output, xmlWriterSettings))
    {
        writer.WriteStartDocument();
 
        element.WriteTo(writer);
 
        writer.WriteEndDocument();
        writer.Flush();
    }
 
    return buffer.ToString();
}



1



0 / 0 / 0

Регистрация: 21.04.2015

Сообщений: 35

06.12.2019, 17:36

 [ТС]

6

Действительно, работаю в Core 2.1.
Не думал, что это важно, при описании проблемы, но теперь буду иметь ввиду.

Сделал все, как подсказали dazering и Ourn. Сработало.

Премного благодарен за потраченное время)))

P.S. Задача решена. Тему можно закрывать.



0



Содержание

  1. Информационные технологии, интернет, веб программирование, IT, Hi-Tech, …
  2. Кодировка XML
  3. Ошибки Кодировки XML
  4. Блокнот Windows
  5. Выводы
  6. I. Коротко об XML¶
  7. Введение в XML¶
  8. Структура XML¶
  9. Правила синтаксиса (Валидность)¶
  10. Сущности¶
  11. Поиск информации в XML файлах (XPath)¶
  12. Кодировки¶
  13. XSD схема¶
  14. Кодировка в XML документе
  15. Символьная кодировка
  16. Юникод
  17. Кодировка XML документа
  18. Ошибки XML
  19. Заключение
  20. forum.clarionlife.net
  21. XML-файлы в кодовой таблице Windows-1251
  22. Как изменить кодировку текстового файла на UTF-8 или Windows 1251
  23. Блокнот Windows
  24. Notepad++
  25. Akelpad

Информационные технологии, интернет, веб программирование, IT, Hi-Tech, …

Кодировка XML

Здравствуйте, уважаемые посетители сайта okITgo.ru! Продолжаем рассматривать язык разметки XML.

XML документы могут содержать символы, не входящие в ASCII, например норвежские, или французские.

Чтобы избежать ошибок, указывайте кодировку XML, или сохраняйте XML файлы в формате Уникод.

Ошибки Кодировки XML

При загрузке XML документа, Вы можете получить две различные ошибки, указывающие на проблемы с кодировкой:

Неправильный символ был найден в текстовом содержимом.

Вы получаете эту ошибку, если ваш XML содержит символы, не входящие в ASCII, и файл был сохранен как однобайтовый ANSI (или ASCII) без указания кодировки.

Переключение из текущей кодировки в указанную кодировку не поддерживается.

Вы получаете эту ошибку, если ваш XML файл был сохранен как двухбайтовый Уникод (или UTF-16) с указанной однобайтовой кодировкой (например, Windows-1251,
ISO-8859-1, UTF-8).

Вы также получаете эту ошибку, если ваш XML файл был сохранен как однобайтовый ANSI (или ASCII) с указанной двухбайтовой кодировкой (например, UTF-16).

Блокнот Windows

Блокнот Windows сохраняет файлы как однобайтовые ANSI (ASCII) по умолчанию.

Если Вы выберите «Сохранить как…», Вы можете указать двухбайтовый Уникод (UTF-16).

Сохраните XML файл ниже как Уникод (заметьте, что документ не содержит атрибута кодировки):

Света
Вася
Позвони мне завтра!

Файл выше, note_encode_none_u.xml НЕ будет генерировать ошибку. Но если Вы укажете однобайтовую кодировку, то будет.

Кодировка (откройте файл), вызовет сообщение об ошибке:

Следующая кодировка (откройте файл), вызовет сообщение об ошибке:

Следующая кодировка (откройте файл), вызовет сообщение об ошибке:

Следующая кодировка (откройте файл), НЕ будет генерировать ошибку:

Выводы

Источник

I. Коротко об XML¶

Введение в XML¶

XML ( англ. eXtensible Markup Language) — расширяемый язык разметки, предназначенный для хранения и передачи данных.

Простейший XML-документ выглядит следующим образом:

Документ XML состоит из элементов (elements). Элемент начинается открывающим тегом (start-tag) в угловых скобках, затем идет содержимое (content) элемента, после него записывается закрывающий тег (end-teg) в угловых скобках.

Некоторые элементы, не содержащие значений, допустимо записывать без закрывающего тега. В таком случае символ / ставится в конце открывающего тега:

Структура XML¶

XML документ должен содержать корневой элемент. Этот элемент является «родительским» для всех других элементов.

Все элементы в XML документе формируют иерархическое дерево. Это дерево начинается с корневого элемента и разветвляется на более низкие уровни элементов.

Все элементы могут иметь подэлементы (дочерние элементы):

Правила синтаксиса (Валидность)¶

Основные правила синтаксиса XML:

Открывающий и закрывающий теги должны определяться в одном регистре:

Сущности¶

Некоторые символы в XML имеют особые значения и являются служебными. Если вы поместите, например, символ внутри XML элемента, то будет сгенерирована ошибка, так как парсер интерпретирует его, как начало нового элемента.

Также ошибка будет сгенерирована и в слудющем примере, если название организации взять в обычные кавычки (английские двойные):

Чтобы ошибки не возникали, нужно заменить символ на его сущность. В XML существует 5 предопределенных сущностей:

Сущность Символ Значение
меньше, чем
> > больше, чем
& & амперсанд
апостроф
« « кавычки

Таблица I.1 — Сущности ¶

Только символы и & строго запрещены в XML. Символ > допустим, но лучше его всегда заменять на сущность.

Таким образом, корректными будут следующие формы записей:

В последнем примере английские двойные кавычки заменены на французские кавычки («ёлочки»), которые не являются служебными символами.

Поиск информации в XML файлах (XPath)¶

XPath ( англ. XML Path Language) — язык запросов к элементам XML-документа. XPath расширяет возможности работы с XML.

XML имеет древовидную структуру. В документе всегда имеется корневой элемент (инструкция version=”1.0”?> к дереву отношения не имеет). У элемента дерева всегда существуют потомки и предки, кроме корневого элемента, у которого предков нет, а также тупиковых элементов (листьев дерева), у которых нет потомков. Каждый элемент дерева находится на определенном уровне вложенности (далее — «уровень»). У элементов на одном уровне бывают предыдущие и следующие элементы.

Это очень похоже на организацию каталогов в файловой системе, и строки XPath, фактически, — пути к «файлам» — элементам. Рассмотрим пример списка книг:

XPath запрос /bookstore/book/price вернет следующий результат:

Чтобы получить больше информации, необходимо модифицировать запрос //book[title[@lang=»it»]] вернет:

В приведенной ниже таблице представлены некоторые выражения XPath и результат их работы:

Кодировки¶

И еще один важный момент, который стоит рассмотреть — кодировки. Существует множество кодировок, о них подробнее можно прочитать в статье Набор символов.

В XML файле кодировка объявляется в декларации:

Часто можно столкнуться с ситуацией, когда текстовый редаткор некорректно распознает кодировку и отображает кракозябры. В такой случае, необходимо выбрать кодировку вручную, для этого выполните:

Программа Кодировка
Notepad++ «Документ → Кодировка»
Geany «Документ → Установить кодировку»
Firefox «Вид → Кодировка»
Chrome «Настройка → Дополнительные инструменты → Кодировка»

Таблица I.3 — Смена кодировки в разных программах ¶

Если ничего не помогает, вполне возможно, что файл был поврежден.

XSD схема¶

XML Schema — язык описания структуры XML-документа, его также называют XSD. Как большинство языков описания XML, XML Schema была задумана для определения правил, которым должен подчиняться документ. Но, в отличие от других языков, XML Schema была разработана так, чтобы её можно было использовать в создании программного обеспечения для обработки документов XML.

После проверки документа на соответствие XML Schema читающая программа может создать модель данных документа, которая включает:

Каждый элемент в этой модели ассоциируется с определённым типом данных, позволяя строить в памяти объект, соответствующий структуре XML-документа. Языкам объектно-ориентированного программирования гораздо легче иметь дело с таким объектом, чем с текстовым файлом.

Подробнее об XSD смотрите:

Примером использования XSD cхем может служить электронная отчетность:

Источник

Кодировка в XML документе

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

Чтобы не возникало ошибок, необходимо указывать, какая кодировка используется в XML документе, либо сохранять файл в универсальной кодировке UTF-8.

Символьная кодировка

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

В компьютерных терминах символьную кодировку также называют символьным набором, символьной раскладкой, кодовым набором и кодом страницы.

Юникод

Юникод — это промышленный стандарт для символьной кодировки текстового документа. Он определяет (почти) все возможные международные символы по именам и числам.

Юникод имеет две разновидности: UTF-8 и UTF-16.

UTF = формат преобразования Юникода (анг. Unicode Transformation Format).

UTF-8 использует один байт (8 бит) для представления общепринятых символов и два (или три) байта для всех остальных символов.

UTF-16 использует два байта (16 бит) для большинства символов и три байта для всего остального.

UTF-8 — стандартная кодировка символов в сети Интернет.

UTF-8 считается кодировкой по умолчанию в HTML-5, CSS, JavaScript, PHP, SQL и XML.

Кодировка XML документа

Первая строка в XML документе называется прологом:

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

Кроме этого, он может содержать информацию о кодировке XML документа. Следующий пролог определяет кодировку UTF-8:

Стандартизация XML устанавливает, что все приложения XML должны понимать кодировки UTF-8 и UTF-16.

UTF-8 является кодировкой по умолчанию для XML документов без информации о кодировке.

Кроме этого, большинство систем приложений XML работают с такими кодировками, как ISO-8859-1, Windows-1252 и ASCII.

Ошибки XML

Очень часто XML документы создаются на одном компьютере, на сервер выгружается с другого, а в браузере отображаются на третьем компьютере.

Если кодировка некорректно интерпретируется всеми тремя компьютерами, то браузер отобразит бессмысленный набор символов, либо вообще выдаст сообщение об ошибке.

Наилучшим выбором в этом случае будет использование кодировки UTF-8. UTF-8 позволяет отображать практически все международные символы, и, кроме этого, она считается кодировкой по умолчанию, если не указана другая кодировка.

Заключение

Когда вы пишите XML документ:

Источник

forum.clarionlife.net

Место общения программистов, форум разработчиков БД на Clarion

XML-файлы в кодовой таблице Windows-1251

Сообщение Гость » 27 Август 2004, 13:27

Мне надо было генерировать (для заказчика) и читать (от заказчика) XML в кодовой таблице Window-1251.

1. Опишем русскую кодировку в CPXML.Inc

2. И заставим выводить данные в windows-1251 (CpXML.clw)

Когда-то мне пришлось более плотнее исследовать C6 XML Support. Сделал точно такие же изменения как Вы.

Я не понял, тогда в этом случае все O’K, что ли?

С уважением, Семен Попов

С уважением, Семен Попов

По крайней мере, файлы, созданные обычным текстовым редактором или сформированные программой (в том числе без использования интерфейса) читаются, только и всего. Просто похоже, что используемая библиотека в принципе не поддерживает кодировок, отличных от буржуинских, а это самый простой путь заставить это делать.

Сообщение Гость » 27 Август 2004, 13:34

И если файл начинается на

,
то именно ‘WINDOWS-1251’ и должен быть в программе. Собственно, путём двухдневных хакерских «экспериментов» и был найден такой вариант.
Возможно, что можно подменить и другие текстовые строки. Кто займётся?

А вот список кодовых таблиц кириллицы из MSDN

Имя обозначение (алиасы)
Cyrillic (DOS) cp866 ( ibm866 )
Cyrillic (ISO) iso-8859-5 (csISOLatin5, csISOLatinCyrillic, cyrillic, ISO_8859-5, ISO_8859-5:1988, iso-ir-144, l5)
Cyrillic (KOI8-R) koi8-r (koi8-ru)
Cyrillic (KOI8-U) koi8-u
Cyrillic (Windows) windows-1251 (x-cp1251)

Источник

Как изменить кодировку текстового файла на UTF-8 или Windows 1251

Кодировка текста – это схема нумерации символов, в которой каждому символу, цифре или знаку присвоено соответствующее число. Кодировку используют для сохранения и обработки текста на компьютере. Каждый раз при сохранении текста в файл он сохраняется с использованием определенной схемы кодирования, и при открытии этого файла необходимо использовать такую же схему, иначе восстановить исходный текст не получится. Самыми популярными кодировками для кириллицы сейчас являются UTF-8, Windows-1251 (CP1251, ANSI).

Для того чтобы программа смогла правильно открыть текстовый файл, иногда приходится вручную менять кодировку, перекодируя текст из одной схемы в другую. Например, не редко возникают проблемы с открытием файлов CSV, XML, SQL, TXT, PHP.

В этой небольшой статье мы расскажем о том, как изменить кодировку текстового файла на UTF-8, Windows-1251 или любую другую.

Блокнот Windows

Если вы используете операционную систему Windows 10 или Windows 11, то вы можете изменить кодировку текста с помощью стандартной программы Блокнот. Для этого нужно открыть текстовый файл с помощью Блокнота и воспользоваться меню « Файл – Сохранить как ».

082621 0816 1

В открывшемся окне нужно указать новое название для файла, выбрать подходящую кодировку и нажать на кнопку « Сохранить ».

082621 0816 2

К сожалению, для подобных задач программа Блокнот часто не подходит. С ее помощью нельзя открывать документы большого размера, и она не поддерживает многие кодировки. Например, с помощью Блокнота нельзя открыть текстовые файлы в DOS 866.

Notepad++

Notepad++ (скачать) является одним из наиболее продвинутых текстовых редакторов. Он обладает подсветкой синтаксиса языков программирования, позволяет выполнять поиск и замену по регулярным выражениям, отслеживать изменения в файлах, записывать и воспроизводить макросы, считать хеш-сумы и многое другое. Одной из основных функций Notepad++ является поддержка большого количества кодировок текста и возможность изменения кодировки текстового файла в UTF-8 или Windows 1251.

Для того чтобы изменить кодировку текста с помощью Notepad++ файл нужно открыть в данной программе. Если программа не смогла правильно определить схему кодирования текста, то это можно сделать вручную. Для этого нужно открыть меню « Кодировки – Кириллица » и выбрать нужный вариант.

082621 0816 3

После открытия текста можно изменить его кодировку. Для этого нужно открыть меню « Кодировки » и выбрать один из вариантов преобразования. Notepad++ позволяет изменить текущую кодировку текста на ANSI (Windows-1251), UTF-8, UTF-8 BOM, UTF-8 BE BOM, UTF-8 LE BOM.

082621 0816 4

После преобразования файл нужно сохранить с помощью меню « Файл – Сохранить » или комбинации клавиш Ctrl-S.

Akelpad

Akelpad (скачать) – достаточно старая программа для работы с текстовыми файлами, которая все еще актуальна и может быть полезной. Фактически Akelpad является более продвинутой версией стандартной программы Блокнот из Windows. С его помощью можно открывать текстовые файлы большого размера, которые не открываются в Блокноте, выполнять поиск и замену с использованием регулярных выражений и менять кодировку текста.

Для того чтобы изменить кодировку текста с помощью Akelpad файл нужно открыть в данной программе. Если после открытия файла текст не читается, то нужно воспользоваться меню « Файл – Открыть ».

082621 0816 5

В открывшемся окне нужно выделить текстовый файл, снять отметку « Автовыбор » и выбрать подходящую кодировку из списка. При этом в нижней части окна можно видеть, как будет отображаться текст.

082621 0816 6

Для того чтобы изменить текущую кодировку текста нужно воспользоваться меню « Файл – Сохранить как » и сохранить документ с указанием новой схемы кодирования.

082621 0816 7

В отличие от Notepad++, текстовый редактор Akelpad позволяет сохранить файл в практически любой кодировке. В частности, доступны Windows 1251, DOS 886, UTF-8 и многие другие.

Источник

  • #1

Не поддерживается при загрузке xml кодировка windows-1251

Пытаюсь прочитать xml-файл с русскими буквами в кодировке windows-1251 на PHP 5.0.5 + libxml + libiconv

И на попытку получить содержимое файла:

Warning: DOMDocument::load() [function.load]: Unsupported encoding windows-1251 in /var/www/example.xml, line: 1 in /var/www/test1.php on line 7

Хотя iconv отлично перекодирует из одной кодировки в другую.

echo iconv(«WINDOWS-1251», «KOI8-R», «Проверка.»);

Нужна помощь!

  • #2

А ты пробовал переходить на UTF-8? Говорят очень полезная штука :)

  • #3

Как ее использовать, она не поддерживает кирилицу!

  • #4

Line
UTF8 поддерживает кириллицу

  • #5

Ну так это бред, получается вначале из Win-1251 в UTF8 потом опять в win-1251

-~{}~ 15.11.05 16:44:

А как решить мою проблему?
Ну подскажите

-~{}~ 15.11.05 22:40:

Автор оригинала: Line
Ну так это бред, получается вначале из Win-1251 в UTF8 потом опять в win-1251

-~{}~ 15.11.05 16:44:

А как решить мою проблему?
Ну подскажите
Так не хочется использовать UTF-8, хочтеся WINDOWS-1251

  • #6

libxml у тебя криво собран и не знает ниче про кодировки

  • #7

PHP:

$doc = new DOMDocument();
$doc->encoding = "windows-1251";

$string =  iconv("windows-1251", "UTF-8", "тестовая строка");


$node = $doc->createElement("para",$string);
$newnode = $doc->appendChild($node);


echo '<pre>';
echo htmlentities($doc->saveXML());
echo '</pre>';

Отдает абракадабру. Тоже проблема с неправильно собранной libxml?

Версия php — 5.1.2

  • #8

Насколько я знаю, в XML-файлах вся информация хранится в кодировке UTF-8. Следовательно, тебе по-любэ придется делать iconv() туда-сюда.

confguru


  • #9

Задачу саму опиши — что-куда и почему.

  • #10

Fred — ВНУТРЕННЕЕ представление у всех XML документов во ВСЕХ XML DOM XSLT библиотеках это UTF (8/16 или вообще полный unicode, зависит от реализации)

libxml в php5 это utf8
если хочешь выводить в другой кодировке, то придется
но совет простой
если есть возможность (MySQL 4.1+, PostgreSQL8.x, FireBird 1.5) то лучше переходи на utf8 СРАЗУ и везде

  • #11

Даже если генерировать документ в родной для ДОМ кодировке, всейравно получается абракадабра.

PHP:

$doc = new DOMDocument();
$doc->encoding = 'UTF-8';

$string =  iconv("windows-1251", "UTF-8", "тестовая строка");

$node = $doc->createElement("para",$string);
$newnode = $doc->appendChild($node);

echo '<pre>';
echo htmlentities($doc->saveXML());
echo '</pre>';

echo $string;

Выдает:

<?xml version=»1.0″ encoding=»UTF-8″?>
<para>Ñ?еÑ?Ñ?оваÑ? Ñ?Ñ?Ñ?ока</para>

тестовая строка

  • #12

Тут уже грабли в русском апаче
попробуй в директории скрипта создать файл .htaccess и прописать CharsetDisable On

  • #13

PHP:

 $string =  iconv("windows-1251", "UTF-8", "тестовая строка");

А почему тогда строка в UTF8 выводится нормально?

confguru


  • #14

Если есть уже PHP5 — юзайте SimpleXML
6 строчек кода и все работает.

  • #15

Я пока лишь изучал DOM модель. Поэтому и возник вопрос: это у меня руки кривые или у DOM проблемы с кириллицей. Собственно с такими же проблемами столкнулся и в DOM XML (PHP4).

А насущные проблемы пока решаю и без DOM-модели.

-~{}~ 07.02.06 12:29:

Автор оригинала: worm
Тут уже грабли в русском апаче
попробуй в директории скрипта создать файл .htaccess и прописать CharsetDisable On

Apache не русский, а обычный 1.3.33

  • #16

я не понимаю в чем проблема-то:

Код:

$doc = new DOMDocument(); 
	$doc->encoding = 'UTF-8'; 
	
	$string =  iconv("WINDOWS-1251", "UTF-8", "тестовая строка"); 
	
	$node = $doc->createElement("para",$string); 
	$newnode = $doc->appendChild($node); 
	
	echo '<pre>'; 
	echo htmlentities($doc->saveXML(), ENT_QUOTES, "UTF-8"); 
	echo '</pre>'; 
	
	echo $string;

<?xml version=»1.0″ encoding=»UTF-8″?>
<para>тестовая строка</para>

тестовая строка

  • #17

Спасибо, теперь все работает. Сам себя запутал.

  • #18

скажите что нужно добавить вот мой парсер

PHP:

<?php
	
	require_once('include/dbLayer.php');
	require_once('include/readableData.php');
	require_once('include/settings.php');
	
	$alliancePlrs = array();
	$hordePlrs = array();
	$gmPlrs = array();

	$s = gSettings::get();
	
	$sDoc = new DOMDocument();
	$sDoc->load($s->statfile);

	
	$plrList = $sDoc->getElementsByTagName('plr');
	for($i = 0; $i < $plrList->length; $i++){
		$plr = $plrList->item($i);
		
		$ar = array( 'name' => 'Unknown', 'level' => 0, 'gender' => 0, 'race' => 0, 'class' => 0, 'map' => -1, 'areaid' => -1);
		$n = $plr->firstChild;
		while($n){
			$ar[$n->nodeName] = $n->nodeValue;
			$n = $n->nextSibling;
		}
		
		switch($ar['race']){
			case 1: // human
			case 3: // dwarf
			case 4: // night elf
			case 7: // gnome
			case 11: // draenei
				$alliancePlrs[] = $ar;
				break;
			case 2:
			case 5:
			case 6:
			case 8:
			case 10:
				$hordePlrs[] = $ar;
				break;
			default:
				// do not know where to add players
				break;
		}
		
	}
?>

Парсит вот эту страничку

PHP:

<?xml version="1.0" encoding="windows-1251"?>
<serverpage>
<sessions>
    <plr>
      <name>Сатана</name>
      <race>5</race>
      <class>5</class>
      <gender>0</gender>
      <pvprank>0</pvprank>
      <level>70</level>
      <map>530</map>
    </plr>
  </sessions>
</serverpage>

Выводит name как сатана
:(

  • #19

sarsen
Не нужно писать в тему 2х летней давности. Создай новую.
И прочти правила форума обязательно ещё раз.

  • #20

sarsen
будешь диггерствовать, поставлю read-only
не надо спамить в старые темы

Like this post? Please share to your friends:
  • Загрузите itunes для windows 7 64 разрядная версия
  • Загрузить тотал коммандер для windows 10
  • Загрузите icloud для windows 10 скачать
  • Загрузить средство устранения неполадок центра обновления windows
  • Загрузился с флешки как восстановить windows