На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

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

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> idhttp, idhttpserver, txmldocument, Работа связки idhttp + txmldocumend (отправка запроса xml) и idhttpserver + txmldocument (принятие запроса и формирование ответа)
    Работаю над клиент-серверным приложением
    Подскажите как правильно отправить в POST запросе готовый TXMLdocument и как правильно его принять и обработать на стороне сервера, а точнее как правильно из принятого запроса IDhttpServer загрузить данные в TXMLdocument для дальнейшей обработки (желательно SaveToFile и LoadFromFile не использовать)
      SaveTo/LoadFromStream?
      Codero ergo sum
      // Программирую — значит, существую
        Это уже вкурил. Вылезла следующая проблема...
        idhttp принимает запрос (с русским всё хорошо)
        создаю tstringlist и в него сохраняю мой запрос (тоже все хорошо. Для проверки сохраняю в файл)
        tstringlist сохраняю saveToStream (тоже все хорошо. Для проверки сохраняю в файл)
        xml.LoadFromStream ... и здесь начинается проблема. Если пришел xml без кириллицы то загружается нормально, но если есть хоть один символ кириллицы то не загружается и всё...

        Может подскажете как это победить?
          Попробуй сохранять xml в utf8.
          Codero ergo sum
          // Программирую — значит, существую
            Отправляю на idhttpserver в кодировке UTF8, для этого перед отправкой запроса, на IDHTTP включаю
            ExpandedWrap disabled
              const
                CONT_TYPE='application/x-www-form-urlencoded';
                SHR_SET='utf-8';
                ...
              begin
               http1.Request.ContentType :=CONT_TYPE;
               http1.Request.Charset :=SHR_SET;
               ...

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

            Русский по http идет нормально, удачно сохраняется в tstringlist и затем в TMemoryStream, а вот уже из tmemorystream
            ExpandedWrap disabled
               txmldocument.loadfromstream(stream)... // вот здесь ошибка если есть русский


            Может Fr0sT подскажешь как принудительно в моём случае сохранить сначала TStringlist , а затем и TMemoryStream в кодировке UTF8
              Цитата dreyqq @
              Это уже вкурил. Вылезла следующая проблема...
              idhttp принимает запрос (с русским всё хорошо)
              создаю tstringlist и в него сохраняю мой запрос (тоже все хорошо. Для проверки сохраняю в файл)
              tstringlist сохраняю saveToStream (тоже все хорошо. Для проверки сохраняю в файл)
              xml.LoadFromStream ... и здесь начинается проблема. Если пришел xml без кириллицы то загружается нормально, но если есть хоть один символ кириллицы то не загружается и всё...

              Может подскажете как это победить?

              Уже ж говорил в другом посте:
              Цитата
              Дело в том, что XML - это не текст. Это байтовый поток, который для большинства случаев выглядит как текст.


              Т.е. если взять вот это вот и сохранить как текстовый файл, оно НЕ прочитается ни одним вменяемым XML-парсером:
              ExpandedWrap disabled
                <?xml version="1.0" encoding="UTF-8"?>
                <hamlet>
                    <line>Есть многое в природе, друг Горацио,</line>
                    <line>Что и не снилось нашим мудрецам.</line>
                </hamlet>


              Первая реакция "да что за нафик, все теги закрыты, чё за дела, братан".
              А на самом деле, правильный поток байтов для такого русскоязычного XML будет очень неочевидным. И это ещё не говоря про BOM-префикс, который может быть, а может и отсутствовать! Вот он, подлец, первые три байта занимает, EF BB BF

              ExpandedWrap disabled
                0000000000: EF BB BF 3C 3F 78 6D 6C │ 20 76 65 72 73 69 6F 6E  �››<?xml version
                0000000010: 3D 22 31 2E 30 22 20 65 │ 6E 63 6F 64 69 6E 67 3D  ="1.0" encoding=
                0000000020: 22 55 54 46 2D 38 22 3F │ 3E 0D 0A 3C 68 61 6D 6C  "UTF-8"?>♪◙<haml
                0000000030: 65 74 3E 0D 0A 20 20 20 │ 20 3C 6C 69 6E 65 3E D0  et>♪◙    <line>Е
                0000000040: 95 D1 81 D1 82 D1 8C 20 │ D0 BC D0 BD D0 BE D0 B3  ›с›т›ь› м›н›о›г›
                0000000050: D0 BE D0 B5 20 D0 B2 20 │ D0 BF D1 80 D0 B8 D1 80  о›е› в› п›р›и›р›
                0000000060: D0 BE D0 B4 D0 B5 2C 20 │ D0 B4 D1 80 D1 83 D0 B3  о›д›е›, д›р›у›г›
                0000000070: 20 D0 93 D0 BE D1 80 D0 │ B0 D1 86 D0 B8 D0 BE 2C   Г›о›р›а›ц›и›о›,
                0000000080: 3C 2F 6C 69 6E 65 3E 0D │ 0A 20 20 20 20 3C 6C 69  </line>♪◙    <li
                0000000090: 6E 65 3E D0 A7 D1 82 D0 │ BE 20 D0 B8 20 D0 BD D0  ne>Ч›т›о› и› н›е
                00000000A0: B5 20 D1 81 D0 BD D0 B8 │ D0 BB D0 BE D1 81 D1 8C  › с›н›и›л›о›с›ь›
                00000000B0: 20 D0 BD D0 B0 D1 88 D0 │ B8 D0 BC 20 D0 BC D1 83   н›а›ш›и›м› м›у›
                00000000C0: D0 B4 D1 80 D0 B5 D1 86 │ D0 B0 D0 BC 2E 3C 2F 6C  д›р›е›ц›а›м›.</l
                00000000D0: 69 6E 65 3E 0D 0A 3C 2F │ 68 61 6D 6C 65 74 3E     ine>♪◙</hamlet>
              Сообщение отредактировано: Mr.Delphist -
              Windows as usual - my "wau" Windows experience
                В stringlist приходит в родной кодировке Дельфей, это utf16. соответственно и дальше идет она. Сохрани в файл и посмотри hex редактором, что там на самом деле.
                Codero ergo sum
                // Программирую — значит, существую
                  Цитата Mr.Delphist @
                  Уже ж говорил в другом посте:
                  Цитата
                  Дело в том, что XML - это не текст. Это байтовый поток, который для большинства случаев выглядит как текст.

                  Далана, наличие БОМ не делает текстовик байтданными
                    Цитата Gonarh @
                    Далана, наличие БОМ не делает текстовик байтданными


                    Да, метка BOM опциональна. Но для самого тела файла это не отменяет факта, что буква "как бы текста" будет представлена одним или несколькими байтами, смотрим хекс-дамп в предыдущем сообщении. А уж если в тексте появятся эмоджи-символы...
                    Windows as usual - my "wau" Windows experience
                      Вопрос с передачей русского через MemoryStream решил
                      Если ком поможет то вот:

                      ExpandedWrap disabled
                          srvZap:=tstringlist.Create;
                          srvZap.Text:=ARequestInfo.Params.Text;
                         
                         
                          zapStream:=TMemoryStream.Create;
                          srvZap.SaveToStream(zapStream, Tencoding.UTF8); // вот так нормально принимает русский
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script Execution time: 0,1135 ]   [ 15 queries used ]   [ Generated: 17.07.19, 18:37 GMT ]