Ошибка xml version 1 0 encoding windows 1251

Пишу парсер для xml файлов, но проблема в том, что в файле кодировка:
encoding=»windows-1251″.
Когда перевел кодировку в ut8 то следующем кодом смог распарсить документ.

for _, file := range files {
            _, filename := utils.Unzip("/Users/farex/upload/"+file.Filename, "/Users/farex/upload/")
            _ = filename
            ///---------- Open our xmlFile-----------------------
            for _, file := range filename {
                xmlFile, err := os.Open("/Users/farex/upload/" + file)
                // if we os.Open returns an error then handle it
                if err != nil {
                    fmt.Println(err)
                }
                fmt.Println("Successfully Opened " + file)

                if utils.Cut(file, 1) == "H" {

                    defer xmlFile.Close()

                    byteValue, _ := ioutil.ReadAll(xmlFile)
                    var zl_list models.ZL_LIST

                    xml.Unmarshal(byteValue, &zl_list)

                    fmt.Println("---ZGLV---")
                    fmt.Println("VERSION" + zl_list.ZGLV[0].VERSION)
                    fmt.Println("DATA" + zl_list.ZGLV[0].DATA)
                    fmt.Println("FILENAME" + zl_list.ZGLV[0].FILENAME)
                    fmt.Println("SD_z" + zl_list.ZGLV[0].SD_Z)

Это все работает, но задача парсить не Документы в формате utf8 , а в cp-1251.
Как можно «конвертировать» cp-1251 в utf-8 ?
Добавил меторд:

func EncodeWindows1251(ba []uint8) []uint8 {
    enc := charmap.Windows1251.NewEncoder()
    out, _ := enc.String(string(ba))
    return []uint8(out)
}

и соответственно вызываю его:

byteValue, _ := ioutil.ReadAll(xmlFile)
a := EncodeWindows1251(byteValue)
var zl_list  models.ZL_LIST
xml.Unmarshal(a, &zl_list)

Тоже не работает…
Но если из документа убрать строку <?xml version="1.0" encoding="windows-1251"?>.
То все работает и документ парсится… Неужели придется регуляркой удалять эту строчку в документе?

Добавил метод наисанный ниже и за импортировал. «golang.org/x/text/encoding/charmap».
Но:
введите сюда описание изображения

Образец файла xml тут кодировка cp-1251

   prog1Csww

19.07.22 — 09:47

Есть следующий формат файла для ЕИС Госзакупок.

Описан здесь

https://zakupki.gov.ru/epz/main/public/download/downloadDocument.html?id=36503

Получился такой файлик

<?xml version=»1.0″ encoding=»WINDOWS-1251″?>

<ФайлПакет ИдТрПакет=»37B62CBA-66A5-4722-A350-5AF49F97E111″ ИдФайл=»ON_NSCHFDOPPR_2ZK-CUS-03223001038_2ZK-SUP-00019150656_20220715_37B62CBA-66A5-4722-A350-5AF49F97E98E» ДатаВрФормир=»2022-07-19T00:00:01″ ТипПрилож=»УПДПрод» ВерсФорм=»1.00″ ИдОтпр=»2ZK-SUP-00019150656″ ИдПол=»2ZK-CUS-03223001038″>

    <Документ>

    <Контент>PNCk  много букв base64 Pg==</Контент>

    </Файл>

    </Документ>

</ФайлПакет>

Но выдает ошибку

РДИК_ИК_0003. Ошибка валидации xml-документа «DP_PAKET»: cvc-datatype-valid.1.2.1: ‘PNCk много букв base64 Pg==’ is not a valid value for ‘base64Binary’.

Что означает эта ошибка?

Формировал base64Binary следующим кодом в 1С

    ВременныйФайл = ПолеВвода3;

    ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл, «CESU-8»);

    ЗаписьТекста.Записать(ПолеВвода1);

    ЗаписьТекста.Закрыть();

    ДД_Файла = Новый ДвоичныеДанные(ВременныйФайл);

    
    ПолеВвода2 = Base64Строка(ДД_Файла);

Потом ПолеВвода2 скопировал в тег «Контент» непосредственно в блокноте.

Как создать рабочий файлик чтобы хоть посмотреть как он выглядит?

   prog1Csww

1 — 19.07.22 — 09:50

Есть наше обращение в техподдержку ЕИС Госзакупок. Может поможет чем…

Вопрос…

Работает ли загрузка документа приемки из файла?

Описание:

Здравствуйте.

1. Зашли в контракты

2. Для отправленного заказчику документа о приемке выбрали «Скачать архив документов»

3. В УПД из архива поменяли ГУИД в имени файла и в тексте xml документа тоже поменяли аттрибут Файл.

4. Поменяли порядковый номер документа и дату первичного документа в тексте xml файла.

5. Попытались загрузить.

6. Выдало ошибку РДИК_ИК_0003. Ошибка валидации xml-документа «DP_PAKET»: cvc-elt.1.a: Cannot find the declaration of element ‘Файл’.

Работает ли Ваша опция загрузки? Или наш подход в корне не верен и выгруженный из ЕИС но подредактированный файл нельзя подгрузить в ЕИС снова?

******************************* Ответ **************************************

Уважаемый пользователь!

Контроль РДИК_ИК_0003 возникает по причине не корректно сформированного транспортного пакета.

Загружается xml-файл (транспортный пакет), не соответствующий интеграционным схемам ЕИС.

Для успешной обработки необходимо передавать транспортный пакет (ФайлПакет) сформированный согласно схеме DP_PAKET_EIS_01_00.xsd.

В составе загружаемого в ЕИС транспортного пакета должны передаваться:

•УПД или УКД

•Приложение к документу, которое является составной и неотъемлемой частью УПД (титул продавца) или УКД (титул продавца) в схеме DP_PACKET_EIS_01_00

Сам пакет должен содержать:

•soap-оболочку (при загрузке xml-файла непосредственно в личном кабинете поставщика soap-оболочка не требуется)

•Шапка (ФайлПакет)

•Документ/Контент в base64 (содержит УПД или УКД)

•Прилож/Контент в base64 (содержит ФайлУПДПрод / ФайлУКДПрод)

УПД — Универсальный передаточный документ (титул Продавца). Интеграционная схема ON_NSCHFDOPPR_1_997_01_05_01_02

УКД — Универсальный корректировочный документ. Интеграционная схема ON_NKORSCHFDOPPR_1_996_03_05_01_01

Отметим, что передаваемые сведения должны иметь кодировку windows-1251 (В шапке ФайлПакет, Файл, ФайлУПДПрод/ФайлУКДПрод необходимо указывать <?xml version=»1.0″ encoding=»windows-1251″ ?>).

Структура документов указана в Схемах Эл. Акт. 12.2 и описана в Альбоме ТФФ Эл Акт 12.2 размещенных в открытой части ЕИС.

https://zakupki.gov.ru/epz/main/public/document/view.html?searchString=§ionId=432&strictEqual=false

   prog1Csww

2 — 20.07.22 — 01:33

Вверх.

   prog1Csww

3 — 20.07.22 — 07:20

Удалось победить первое препятствие

код обработки заменил на

    ПотокВПамяти = Новый ПотокВПамяти();

    Текст = Новый ЗаписьТекста(ПотокВПамяти, КодировкаТекста.UTF8, , Символы.ПС);

    Текст.Записать(ПолеВвода1);

    Текст.Закрыть();

    
    ДвоичныеДанные = ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();

    СтрокаФорматBase64 = Base64Строка(ДвоичныеДанные);

    
    СтрокаФорматBase64 = СтрЗаменить(СтрокаФорматBase64, Символы.ВК, «»);

    СтрокаФорматBase64 = СтрЗаменить(СтрокаФорматBase64, Символы.ПС, «»);

    
    ПолеВвода2 = СтрокаФорматBase64;

И всё прошло. Но возникла новая проблема

ЕИС ругается на Element type «Р» must be followed by either attribute specifications, «>» or «/>».

Яндекс.Валидатор XML + XSD тоже выдает такую же ошибку причем пишет что сервис временно недоступен.

В XML видимых ошибок нет. Тег «Контент» можно декодировать на сайте http://base64.ru/

Иностранный валидатор XML + XSD https://www.freeformatter.com/xml-validator-xsd.html ошибок не выдает. Жду ответа от техподдержки ЕИСа.

   Ryzeman

4 — 20.07.22 — 07:27

Ну, вообще тебе английским по-белому писало ошибку что в (0) что сейчас. В (0) была проблема с <Контент> как раз то, что ты не написал. В теле ожидалась строка base64Binary, у тебя там были какие-то недопустимые символы. В (3) у тебя где-то в XML незакрытый элемент <p>. То есть он буквально тебе пишет, что открытие тега <p> должно сопровождаться его закрытием. Посмотреть это можно в любой удобной гляделке XML — в браузере или notepad++ с компонентой для XML, например. Не видя что ты там формируешь что-то тебе ещё посоветовать невозможно.

   Ryzeman

5 — 20.07.22 — 07:29

Вариант — у тебя где-то шифруется что то вроде <p или <p>, например, если ты код маркировки передаёшь — это возможно. Тогда надо символы < и > экранировать.

   prog1Csww

6 — 20.07.22 — 09:51

(4) <?xml version=»1.0″ encoding=»WINDOWS-1251″?>

<Файл ИдФайл=»ON_NSCHFDOPPR_2ZK-CUS-03223001038_2ZK-SUP-00019150656_20220715_37B62CBA-66A5-4722-A350-5AF49F97E98E» ВерсФорм=»5.01″ ВерсПрог=»12.2″>

    <СвУчДокОбор ИдОтпр=»2ZK-SUP-00019150656″ ИдПол=»2ZK-CUS-03223001038″>

        <СвОЭДОтпр НаимОрг=»Федеральное казначейство» ИННЮЛ=»7710568760″ ИдЭДО=»2ZK»/>

    </СвУчДокОбор>

    <Документ КНД=»1115131″ Функция=»СЧФДОП» ПоФактХЖ=»Документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)» НаимДокОпр=»Счет-фактура и документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)» ДатаИнфПр=»15.07.2022″ ВремИнфПр=»01.44.16″ НаимЭконСубСост=»ИВАНОВА ОЛЬГА ВЛАДИМИРОВНА» СоглСтрДопИнф=»0000.0000.0000″>

        <СвСчФакт НомерСчФ=»4″ ДатаСчФ=»20.07.2022″ КодОКВ=»643″>

            <СвПрод>

                <ИдСв>

                    <СвИП ИННФЛ=»123456789012″>

                        <ФИО Фамилия=»ИВАНОВА» Имя=»ОЛЬГА» Отчество=»ВЛАДИМИРОВНА»/>

                    </СвИП>

                </ИдСв>

                <Адрес>

                    <АдрРФ КодРегион=»99″ Город=»Г ИВАНОВО»/>

                </Адрес>

                <Контакт Тлф=»7 999 999 9999″ ЭлПочта=»hleb@mail.ru»/>

                <БанкРекв НомерСчета=»99999999999999999999″>

                    <СвБанк НаимБанк=»ПАО СБЕРБАНК» БИК=»999999999″ КорСчет=»99999999999999999999″/>

                </БанкРекв>

            </СвПрод>

            <СвПокуп ОКПО=»99999999″ ИнфДляУчаст=»0″ КраткНазв=»МБДОУ ДЕТСКИЙ САД»>

                <ИдСв>

                    <СвЮЛУч НаимОрг=»МУНИЦИПАЛЬНОЕ БЮДЖЕТНОЕ ДОШКОЛЬНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДЕТСКИЙ САД» ИННЮЛ=»9999999999″ КПП=»999999999″/>

                </ИдСв>

                <Адрес>

                    <АдрРФ Индекс=»999999″ КодРегион=»99″ Город=»ГОРОД ИВАНОВО» Улица=»УЛИЦА ИВАНОВА» Дом=»ДОМ 9″/>

                </Адрес>

                <Контакт Тлф=»8 999 999 99 99″ ЭлПочта=»dou@yandex.ru»/>

                <БанкРекв НомерСчета=»99999999999999999999″>

                    <СвБанк НаимБанк=»УФК по Иваново» БИК=»999999999″ КорСчет=»99999999999999999999″/>

                </БанкРекв>

            </СвПокуп>

            <ДопСвФХЖ1 НаимОКВ=»Российский рубль»>

                <ИнфПродГосЗакКазн ДатаГосКонт=»14.06.2022″ НомерГосКонт=»999 999″/>

            </ДопСвФХЖ1>

            <ДокПодтвОтгр НаимДокОтгр=»Документ о приемке» НомДокОтгр=»2″ ДатаДокОтгр=»15.07.2022″/>

        </СвСчФакт>

        <ТаблСчФакт>

            <СведТов НомСтр=»1″ НаимТов=»Хлеб пшеничный» ОКЕИ_Тов=»166″ КолТов=»4.8″ ЦенаТов=»100.33″ СтТовБезНДС=»481.58″ НалСт=»без НДС» СтТовУчНал=»481.58″>

                <Акциз>

                    <БезАкциз>без акциза</БезАкциз>

                </Акциз>

                <СумНал>

                    <БезНДС>без НДС</БезНДС>

                </СумНал>

                <ДопСведТов ПрТовРаб=»1″ НаимЕдИзм=»Килограмм» КодТов=»10.71.11.110″/>

            </СведТов>

            <СведТов НомСтр=»2″ НаимТов=»Хлеб ржано-пшеничный» ОКЕИ_Тов=»166″ КолТов=»2.8″ ЦенаТов=»99″ СтТовБезНДС=»277.2″ НалСт=»без НДС» СтТовУчНал=»277.2″>

                <Акциз>

                    <БезАкциз>без акциза</БезАкциз>

                </Акциз>

                <СумНал>

                    <БезНДС>без НДС</БезНДС>

                </СумНал>

                <ДопСведТов ПрТовРаб=»1″ НаимЕдИзм=»Килограмм» КодТов=»10.71.11.110″/>

            </СведТов>

            <ВсегоОпл СтТовБезНДСВсего=»758.78″ СтТовУчНалВсего=»758.78″>

                <СумНалВсего>

                    <БезНДС>без НДС</БезНДС>

                </СумНалВсего>

            </ВсегоОпл>

        </ТаблСчФакт>

        <СвПродПер>

            <СвПер СодОпер=»Работы выполнены в полном объеме» ДатаПер=»04.07.2022″>

                <ОснПер НаимОсн=»Контракт» НомОсн=»999 9999″ ДатаОсн=»14.06.2022″ ДопСвОсн=»Реестровый номер в реестре контрактов: 9999999999999999999″/>

                <ТранГруз/>

            </СвПер>

        </СвПродПер>

        <Подписант ОблПолн=»5″ Статус=»4″ ОснПолн=»Должностные обязанности»>

            <ИП ИННФЛ=»123456789012″>

                <ФИО Фамилия=»ИВАНОВА» Имя=»ОЛЬГА» Отчество=»ВЛАДИМИРОВНА»/>

            </ИП>

        </Подписант>

    </Документ>

</Файл>

  

prog1Csww

7 — 21.07.22 — 02:18

Ответ техподдержки

Уважаемый пользователь!

Несмотря на то, что в прологе титула продавца указана кодировка <?xml version=»1.0″ encoding=»WINDOWS-1251″?> сведения закодированы в UTF-8.

Просьба сведения, находящиеся в Документ/Контент, формировать в windows-1251, а затем кодировать в base64.

Также отметим, что в загружаемом транспортном пакете отсутствует приложение к титулу продавца (ФайлУПДПрод), которое является составной и неотъемлемой частью УПД (титул продавца) и передается в блоке Прилож/Контент.

Просьба корректно формировать загружаемый xml-файл.

Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс

Почему браузер ругается? Пробовал и кавычки менять и вроде теги все закрыты…

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2018-01-30 17:40">
<shop>
<name>Магазин</name>
<company>Nest</company>
<url>http://www.test.ru</url>
<version>Выгрузка для сайта test.net</version>
<category id='124'>Основной раздел каталога</category>
<offers>
<offer>
<vendor>Silhouette</vendor>
<model>TMA Pilot</model>
<color>Черный</color>
<price>13590</price>
<url>http://www.test.ru/123/</url>
<picture>http://www.test.ru/upload/393c0.jpg</picture>
<category>Фигня</category>
</offer>
</offers>
</shop>
</yml_catalog>

Parse error: syntax error, unexpected ‘version’
(T_STRING) in /home/bitrix/www/yandex/new.php on line 1

Здравствуйте! Отправила отчет СЗВ-М , пришел вот такой ответ<?xml version=»1.0″ encoding=»WINDOWS-1251″?>

-<ошибка>

<описание>Документооборот:3e02feb845444f65a0d97a56 3aa6b19c Транзакция :b96cbc7da26e41d7b760e9d667ac05ee ошибка при распаковке сообщения b96cbc7da26e41d7b760e9d667ac05ee :Сообщение не зашифровано или формат сообщения искажен</описание>

</ошибка> , хотя проверочная программа не нашла никаких ошибок

 
smart
 
(2011-03-14 09:40)
[0]

Здравствуйте! Как изменить кодировку xml? При <?xml version="1.0" encoding="windows-1251" ?> он не отображает кириллицу, если изменить на <?xml version="1.0" encoding="UTF-8"?> то он пишет Bad xml structure. Root element must be document. Как быть?


 
RWolf ©
 
(2011-03-14 10:03)
[1]

приведите текст проблемного XML.


 
smart
 
(2011-03-14 10:12)
[2]


> приведите текст проблемного XML.

<?xml version="1.0" encoding="windows-1251"?>
<document>
<function name="catalogCreate">
<param name="login">logg</param>
<param name="pass">password</param>
<param name="idemployer">1</param>
<param name="name"><![CDATA[Новый справочик]]></param>
<param name="iddepartment">1000</param>
</function>
<client name="SomeProgram" version="1.0"/>
</document>


 
Медвежонок Пятачок ©
 
(2011-03-14 10:22)
[3]

он не отображает кириллицу

Кто он?

http://www.dropmocks.com/mSbE1


 
RWolf ©
 
(2011-03-14 10:42)
[4]

http://clip2net.com/s/PhXX
всё прекрасно отображается.


 
smart
 
(2011-03-14 10:57)
[5]

Этот xml создает новый каталог, и название этого каталога «Новый справочник» отображается так: Р’РёРґ Поступления. Как это исправить?


 
RWolf ©
 
(2011-03-14 11:01)
[6]

ну так кодировка файла должна соответствовать заявленной.
если написано в шапке «windows-1251», то и сохранять в windows-1251, а не в UTF-8.


 
smart
 
(2011-03-14 11:03)
[7]

в том то и дело, что windows-1251 не отображает кириллицу


 
RWolf ©
 
(2011-03-14 11:05)
[8]


> smart   (14.03.11 11:03) [7]

в [3] наглядно показано, что отображает.


 
Медвежонок Пятачок ©
 
(2011-03-14 11:05)
[9]

надо монитор поменять.


 
Медвежонок ХМЛ ©
 
(2011-03-14 11:06)
[10]

он у тебя не русифицирован.


 
clickmaker ©
 
(2011-03-14 11:06)
[11]

> Этот xml создает новый каталог

сам xml не может ничего создавать


 
smart
 
(2011-03-14 11:07)
[12]

Удалено модератором


 
Медвежонок ХМЛ ©
 
(2011-03-14 11:07)
[13]

у него монитор с функцией создания каталогов. но не русифицирован.


 
Anatoly Podgoretsky ©
 
(2011-03-14 11:09)
[14]


> smart   (14.03.11 10:57) [5]

Зачем тогда говорил, что «xml не отображает кириллицу», вводил в заблуждение.


 
Anatoly Podgoretsky ©
 
(2011-03-14 11:10)
[15]

> smart  (14.03.2011 11:03:07)  [7]

Чего опять не отображает, ты бы уж определился, а то скучно становится.


 
Anatoly Podgoretsky ©
 
(2011-03-14 11:11)
[16]

> Медвежонок ХМЛ  (14.03.2011 11:07:13)  [13]

Русифицирован, а не UTFфицирован


 
clickmaker ©
 
(2011-03-14 11:12)
[17]

> монитор с функцией создания каталогов. но не русифицирован

ну, если еще на гарантии, то можно поменять, наверно. Или прошивку скачать


 
smart
 
(2011-03-14 11:12)
[18]

Удалено модератором


 
Anatoly Podgoretsky ©
 
(2011-03-14 11:15)
[19]

Ты уже три раза это повторил, а мы и в первый раз хорошо слышали.


 
smart
 
(2011-03-14 11:16)
[20]

Как это исправить?


 
Игорь Шевченко ©
 
(2011-03-14 11:17)
[21]

А как XML относится к каталогу ?


 
Медвежонок ХМЛ ©
 
(2011-03-14 11:17)
[22]

Как это исправить?

не доставать имя каталога как подстроку внутри [] из файла, который реально в утф-8


 
smart
 
(2011-03-14 11:28)
[23]


> не доставать имя каталога как подстроку внутри [] из файла,
>  который реально в утф-8

Можно по-подробней?


 
Плохиш ©
 
(2011-03-14 11:30)
[24]


> smart   (14.03.11 11:16) [20]
>
> Как это исправить?
>

Надо исправить ошибки в твоей программе.


 
Медвежонок ХМЛ ©
 
(2011-03-14 11:36)
[25]

Можно по-подробней?
Не можно, а нужно. Выкладывай подробности.


 
smart
 
(2011-03-14 11:42)
[26]

В дельфи использую function catalogCreate и так stringstream.WriteString("input_xml=<?xml version="1.0" encoding="windows-1251"?>")stringstream.WriteString("</document>"); создаю новый каталог. Новый каталог создается, только название его «непонятное». Если вместо названия каталога «Новый справочник» использовать латиницу — то все ок, но мне нужно чтобы название было на русском языке


 
Медвежонок ХМЛ ©
 
(2011-03-14 11:43)
[27]

не доставать имя каталога как подстроку внутри [] из файла, который реально в утф-8


 
smart
 
(2011-03-14 11:47)
[28]

То есть просто <param name="name"><Новый справочик></param> ?


 
clickmaker ©
 
(2011-03-14 11:49)
[29]

содержимое узла не надо в <> закрывать


 
smart
 
(2011-03-14 11:53)
[30]

Так он Bad xml structure. Root element must be document пишет


 
Медвежонок ХМЛ ©
 
(2011-03-14 11:54)
[31]

Потому что «Он» — умный. Он все правильно пишет.


 
smart
 
(2011-03-14 11:59)
[32]

Он-то умный. Это я просто недоконца изучил xml. Пока. Вот и прошу Вас помочь…


 
Плохиш ©
 
(2011-03-14 12:02)
[33]

Надо использовать в программе WideString.


 
Медвежонок Пятачок ©
 
(2011-03-14 12:03)
[34]

лучше не надо


 
smart
 
(2011-03-14 12:26)
[35]


> содержимое узла не надо в <> закрывать

Полюбому иероглифы выходят (((


 
smart
 
(2011-03-14 12:44)
[36]

Кто знает, помогите плз. Оч надо


 
clickmaker ©
 
(2011-03-14 12:48)
[37]

> Кто знает

«Он» знает


 
Anatoly Podgoretsky ©
 
(2011-03-14 12:54)
[38]

> smart  (14.03.2011 12:26:35)  [35]

А может там по близости есть программисты?


 
sniknik ©
 
(2011-03-14 12:55)
[39]

> Кто знает
чуда ждешь? сказали же «ошибки в твоей программе.», и кто ее здесь знает?

Медвежонок ХМЛ ©   (14.03.11 11:36) [25]
> Можно по-подробней?
> Не можно, а нужно. Выкладывай подробности.


 
smart
 
(2011-03-14 13:04)
[40]

Вот:
begin
 stringstream:=TStringStream.Create("");
 stringstream2:=TStringStream.Create("");

 try
stringstream.WriteString("input_xml=<?xml version="1.0" encoding="windows-1251"?>");
   stringstream.WriteString("<document>");
   stringstream.WriteString("<function name="catalogCreate">");
   stringstream.WriteString("<param name="login">logg</param>");
   stringstream.WriteString("<param name="pass">password</param>");
   stringstream.WriteString("<param name="idEmployer">1</param>");
   stringstream.WriteString("</function>");
   stringstream.WriteString("<client name="SomeProgram" version="1.0"/>");
   stringstream.WriteString("</document>");
   IdHTTP1.Request.ContentType:="application/x-www-form-urlencoded";
   IdHTTP1.Request.ContentLength:=stringstream.Size;
   stringstream.Position:=0;
   stringstream2.WriteString(Form1.IdHTTP1.Post("http://888.888.888.888/api/functions.php", stringstream));
   Form1.IdHTTP1.Disconnect;
   Form1.XMLDocument1.LoadFromStream(stringstream2);
   Form1.XMLDocument1.Active:=true;
   Form1.XMLDocument1.SaveToFile("c:expl.xml");
   finally
   stringstream.Free;
 end;


 
smart
 
(2011-03-14 13:05)
[41]

С поправкой:
begin
stringstream:=TStringStream.Create("");
stringstream2:=TStringStream.Create("");

try
stringstream.WriteString("input_xml=<?xml version="1.0" encoding="windows-1251"?>");
  stringstream.WriteString("<document>");
  stringstream.WriteString("<function name="catalogCreate">");
  stringstream.WriteString("<param name="login">logg</param>");
  stringstream.WriteString("<param name="pass">password</param>");
  stringstream.WriteString("<param name="idEmployer">1</param>");
  stringstream.WriteString("<param name="name"><![CDATA[Новый справочик]]></param>");
  stringstream.WriteString("</function>");
  stringstream.WriteString("<client name="SomeProgram" version="1.0"/>");
  stringstream.WriteString("</document>");
  IdHTTP1.Request.ContentType:="application/x-www-form-urlencoded";
  IdHTTP1.Request.ContentLength:=stringstream.Size;
  stringstream.Position:=0;
  stringstream2.WriteString(Form1.IdHTTP1.Post("http://888.888.888.888/api/functions.php", stringstream));
  Form1.IdHTTP1.Disconnect;
  Form1.XMLDocument1.LoadFromStream(stringstream2);
  Form1.XMLDocument1.Active:=true;
  Form1.XMLDocument1.SaveToFile("c:expl.xml");
  finally
  stringstream.Free;
end;


 
Медвежонок Пятачок ©
 
(2011-03-14 13:15)
[42]

Form1.IdHTTP1.Post(«http://888.888.888.888/api/functions.php», stringstream);
ShowMessage(stringstream.string);

Вот твои крякозябры.

И как видишь, никакой xml здесь не использовался, и не мешал русскому наименованию папки.


 
Медвежонок ХМЛ ©
 
(2011-03-14 13:17)
[43]

Точнее даже так

ShowMessage(Form1.IdHTTP1.Post(«http://888.888.888.888/api/functions.php», stringstream));


 
smart
 
(2011-03-14 13:25)
[44]

Ошибка. в названиях каталога те же иероглифы…


 
Медвежонок ХМЛ ©
 
(2011-03-14 13:26)
[45]

Все, я пас……
Медицина бессильна


 
Плохиш ©
 
(2011-03-14 13:52)
[46]


> smart   (14.03.11 13:04) [40]

Какое отношение всё это <…> имеет к xml и созданию каталогов?


 
smart
 
(2011-03-14 13:55)
[47]

С помощью этого кода создается каталог. <function name="catalogCreate"> — Создать новый каталог


 
Плохиш ©
 
(2011-03-14 14:02)
[48]

Пора нанимать программиста.


 
brother ©
 
(2011-03-15 06:07)
[49]

smart
ты понял к чему тебе предлагают нанять программиста?


 
smart
 
(2011-03-15 08:56)
[50]


> Form1.IdHTTP1.Post(«http://888.888.888.888/api/functions.
> php», stringstream);
> ShowMessage(stringstream.string);
>
> Вот твои крякозябры.
>
> И как видишь, никакой xml здесь не использовался, и не мешал
> русскому наименованию папки.

Проблемы у меня IdHTTP1.Post-кодировкой. Вместо Utf нужно использовать windows-1251, проблема кажется в этом. Как с этим разобраться?


 
sniknik ©
 
(2011-03-15 09:26)
[51]

> Вместо Utf нужно использовать windows-1251
это тебя «осенило», или наконец то прочел ответы в ветке?

на самом деле windows-1251 единственное где нужно это в виндовой функции создания каталога (если не юникодная), а в Post, xml, … вполне пойдет любая.
лирика.

> Как с этим разобраться?
учиться учится и еще раз учиться! (как расписывал ручку тов.Ленин)

p.s. все больше и больше смахивает на попытку «развода» (ну не бывает настолько ….).


 
smart
 
(2011-03-15 09:56)
[52]

И времени и желания нет и не было «на развод». Просто нужна помощь (((


 
RWolf ©
 
(2011-03-15 11:06)
[53]


> Как с этим разобраться?

отладчиком.
пошаговым выполнением алгоритма, с просмотром всех переменных.


 
smart
 
(2011-03-15 11:14)
[54]

Отладчиком пользовался, все просмотрел. В программе  все нормально, кроме кодировки.
Я думаю что проблема в этой строке, но где именно пока непонятно…
> stringstream2.WriteString(Form1.IdHTTP1.Post(«http://888.
> 888.888.888/api/functions.php», stringstream));


 
Dennis I. Komarov ©
 
(2011-03-15 11:30)
[55]


> Я думаю что проблема в этой строке

Да нет, проблема совсем в другом месте…


 
smart
 
(2011-03-15 11:33)
[56]


> Да нет, проблема совсем в другом месте…
>

Где же?


 
brother ©
 
(2011-03-15 11:38)
[57]

у тебя в коде вестимо


 
Медвежонок Пятачок ©
 
(2011-03-15 11:45)
[58]

в [41] ошибок нет, хотя код и еретический.
ошибка дальше, в неприведенном здесь коде.


 
DiamondShark ©
 
(2011-03-15 11:45)
[59]


> smart   (15.03.11 11:33) [56]
> > Да нет, проблема совсем в другом месте…> Где же?

В реализации http://888.888.888.888/api/functions.php


 
Dennis I. Komarov ©
 
(2011-03-15 11:47)
[60]


> brother ©   (15.03.11 11:38) [57]

вообще, я не это имел ввиду…


 
Медвежонок ХМЛ ©
 
(2011-03-15 11:53)
[61]

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


 
smart
 
(2011-03-15 12:11)
[62]


> ошибка дальше, в неприведенном здесь коде.

Вот листинг:

function TForm1.catalogCreate(Login: string;Password1: string): string;
var
 stringstream: TStringStream;
 stringstream2: TStringStream;
begin
stringstream:=TStringStream.Create("");
stringstream2:=TStringStream.Create("");

try
stringstream.WriteString("input_xml=<?xml version="1.0" encoding="windows-1251"?>");
 stringstream.WriteString("<document>");
 stringstream.WriteString("<function name="catalogCreate">");
 stringstream.WriteString("<param name="login">logg</param>");
 stringstream.WriteString("<param name="pass">password</param>");
 stringstream.WriteString("<param name="idEmployer">1</param>");
 stringstream.WriteString("<param name="name">Новый справочик></param>");
 stringstream.WriteString("</function>");
 stringstream.WriteString("<client name="SomeProgram" version="1.0"/>");
 stringstream.WriteString("</document>");
 IdHTTP1.Request.ContentType:="application/x-www-form-urlencoded";
 IdHTTP1.Request.ContentLength:=stringstream.Size;
 stringstream.Position:=0;
   ShowMessage(Form1.IdHTTP1.Post("http://"888.888.888"/api/functions.php", stringstream));
Form1.IdHTTP1.Disconnect;
 Form1.XMLDocument1.LoadFromStream(stringstream2);
 Form1.XMLDocument1.Active:=true;
 Form1.XMLDocument1.SaveToFile("c:expl.xml");
 finally
 stringstream.Free;
end;
 end;

procedure TForm1.Button1Click(Sender: TObject);
var
 t: String;
begin
t:=    MD5DigestToStr(MD5String(Password.Text));
IdEmpl1.Text:= catalogCreate(Login.Text,t);
end;

Попробовал так, но результата пока нет…


 
Медвежонок Пятачок ©
 
(2011-03-15 12:19)
[63]

ты запарил уже своей непробиваемостью.

вот пришел к тебе ответ и ты его сохранил.
и в нем имя папки.
Form1.XMLDocument1.SaveToFile(«c:expl.xml»);

где ты его читаешь?
имя для создаваемой папки где и как читаешь?


 
smart
 
(2011-03-15 12:31)
[64]

Новый каталог создается в другой — параллельной программе. Там и весь список папок. Только в название нового каталога сейчас там Новый справочник


 
brother ©
 
(2011-03-15 12:34)
[65]

ты точно — НЕ ПРОБИВАЕМЫЙ!!!!


 
brother ©
 
(2011-03-15 12:36)
[66]

> вот пришел к тебе ответ и ты его сохранил.

и скорее всего уже битый…


 
Медвежонок ХМЛ ©
 
(2011-03-15 12:37)
[67]

Новый каталог создается в другой — параллельной программе.

Тогда спи спокойно.
У тебя ошибок нету.


 
brother ©
 
(2011-03-15 12:40)
[68]

> Form1.XMLDocument1.LoadFromStream(stringstream2);
> Form1.XMLDocument1.Active:=true;
> Form1.XMLDocument1.SaveToFile(«c:expl.xml»);

где его заполнение/чтение?


 
Медвежонок ХМЛ ©
 
(2011-03-15 12:48)
[69]

это делается в третьей перпендикулярной программе.
разве не понятно?


 
brother ©
 
(2011-03-15 12:49)
[70]

гыгы, я догадывался)


 
Плохиш ©
 
(2011-03-15 12:52)
[71]

Судя по тому, что это блондинко засовывает в TStringStream, в /api/functions.php реализован обычный веб-сервис. Так почему бы не создать нормального клиента с помощью встроенного в делфи мастера?

PS. Долго ещё оно будет бодаться, используя комбинируя компоненты поддерживающие юникод и не поддерживающие :-))


 
Dennis I. Komarov ©
 
(2011-03-15 12:56)
[72]

Да пусть бодается, если brain.sys встал криво…


 
sniknik ©
 
(2011-03-15 13:18)
[73]

> с полученным из пхп ответом надо работать как с xml
х.м. … у меня бывает от пхп рекордсеты(/json) приходят, или бинарные данные (например иконки/логотип компании), по протоколу/договоренности… (и кстати .php в конце может и не быть признаком обработчик пхп. как «ту сторону» реализуют я часто не знаю, а вот общие части протокола, со вполне определенными ссылками/функциями для всех одинаковы… эээ… в определенных пределах. стремимся к этому, это точно)

я к тому, уточнение, что «работать как с xml» надо только если пришел xml, что в данном случае не очевидно (и вряд ли будет с его «подходом»).


 
smart
 
(2011-03-15 13:26)
[74]


> «работать как с xml» надо только если пришел xml, что в
> данном случае не очевидно

Собственно xml:
<?xml version="1.0" encoding="windows-1251" ?>
- <document>
- <info>
 <api_version>1.0</api_version>
 <time>10:11:15</time>
 <execution_time>0.24351406097412</execution_time>
 </info>
- <result value="0">
 <id>120</id>
 <message>120</message>
 </result>
 </document>


 
Anatoly Podgoretsky ©
 
(2011-03-15 13:28)
[75]

> brother  (15.03.2011 12:36:06)  [66]

Не битый, а избитый, но не до конца.


 
app ©
 
(2011-03-15 13:30)
[76]

Надоело, потрепаться можно и в Прочем


 
Медвежонок Пятачок ©
 
(2011-03-15 13:31)
[77]

Мужик, тебе же сказали, покойся с миром, у тебя нет ошибок.
Их допустил программист второй, параллельной программы.
А ты иди в кассу за премией.


 
sniknik ©
 
(2011-03-15 14:08)
[78]

> Собственно xml:
все таки xml… а чего же тогда xml в xml как есть с заголовком вкладывается? оно что должно телепатически правильно «сложить» document-ы?


 
Медвежонок Пятачок ©
 
(2011-03-15 14:18)
[79]

и главное где же в нем хоть намек на имя каталога?


 
Conflict ©
 
(2011-03-15 14:35)
[80]

оффтоп
А на самом деле в заголовок попадает кракозябла из [5] вот какая, а не Новый справочник:
Вид Поступления
CP1251 → UTF-8
Вид Поступления
/оффтоп


 
sniknik ©
 
(2011-03-15 17:21)
[81]

http://delphimaster.net/view/2-1298888893/
http://delphimaster.net/view/2-1298888893/
(пора банить за смену ника :)

http://delphisources.ru/forum/showthread.php?t=15743


 
Inovet ©
 
(2011-03-15 17:58)
[82]

> [81] sniknik ©   (15.03.11 17:21)
> (пора банить за смену ника :)

Да я сразу те ветки вспомнил. Месяц уже бьётся над справочниками. По-моему какое-то глухое непонимание даже не того, как сделать, а что надо сделать.


 
boriskb ©
 
(2011-03-15 18:42)
[83]


> По-моему какое-то глухое непонимание…

что надо учиться.


 
gonzales
 
(2011-03-19 23:39)
[84]

переконверти просто строку из UTF-8 в ASCII, вот например функция.

function TForm1.UTF8ToStrSmart(Value: String): String;
{Convert string from UTF-8 format mixed with standart ASCII symbols($00..$7f)}
var
Digit: String;
i: Word;
HByte: Byte;
Len: Byte;
begin
Result := "";
Len := 0;
if Value = "" then Exit;
for i := 1 to Length(Value) do
begin
  if Len > 0 then
  begin
    Digit := Digit + Value[i];
    Dec(Len);
    if Len = 0 then
      Result := Result + UTF8ToStr(Digit);
  end else
  begin
    HByte := Ord(Value[i]);
    if HByte in [$00..$7f] then       //Standart ASCII chars
      Result := Result + Value[i]
    else begin
      //Get length of UTF-8 char
      if HByte and $FC = $FC then
        Len := 6
      else if HByte and $F8 = $F8 then
        Len := 5
      else if HByte and $F0 = $F0 then
        Len := 4
      else if HByte and $E0 = $E0 then
        Len := 3
      else if HByte and $C0 = $C0 then
        Len := 2
      else begin
        Result := Result + Value[i];
        Continue;
      end;
      Dec(Len);
      Digit := Value[i];
    end;
  end;
end;
end;

а вам, уважаемые стыдно должно быть, не можете парню помочь, просто жлобы какие-то собрались. Вообще чувак, не ходи сюда, есть другие ресурсы и люди там адекватные.


 
gonzales
 
(2011-03-19 23:44)
[85]

да, чуть не забыл, вот еще функция
function TForm1.UTF8ToStr(Value: String): String;
{Convert string from UTF-8 format into ASCII}
var
buffer: Pointer;
BufLen: LongWord;
begin
BufLen := Length(Value) + 4;
GetMem(buffer, BufLen);
FillChar(buffer^, BufLen, 0);
MultiByteToWideChar(CP_UTF8, 0, @Value[1], BufLen - 4, buffer, BufLen);
Result := WideCharToString(buffer);
FreeMem(buffer, BufLen);
end;

используем

s:=form1.UTF8ToStrSmart(s1);


 
Игорь Шевченко ©
 
(2011-03-20 00:33)
[86]


> а вам, уважаемые стыдно должно быть

Чувство долга есть у каждого, но одним вечно кажется,
что они что-то должны, а другие уверены, что должны им


 
sniknik ©
 
(2011-03-20 11:18)
[87]

> есть другие ресурсы и люди там адекватные.
сходи уж тогда по третьей ссылке из sniknik ©   (15.03.11 17:21) [81], и там тоже «постыди» «адекватных» людей которые перестали ему помогать… когда тоже самое пошло «на второй круг». (у нас это пошло раньше, в первых ссылках этого поста)

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

блин, потом и рождаются «монстры», указано одно, содержание другое, внутри данных не перекодированные теги, указан внешний парсер/»проверяльщик» (который существует только на машине клиента), и т.д. с которыми мне постоянно приходится иметь дело…


Понравилась статья? Поделить с друзьями:
  • Ошибка xml parsing error not well formed
  • Ошибка xml mismatched end tag
  • Ошибка xls0501 свойство content установлено больше одного раза
  • Ошибка xlive для colin mcrae dirt
  • Ошибка xlive dll при запуске gta 4