powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Искажение бинарных данных в _POST
7 сообщений из 32, страница 2 из 2
Искажение бинарных данных в _POST
    #38300187
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uZvezdochet,

poWinHttp.setRequestHeader( "Content-Type", "multipart/form-data")
может еще boundary придется указать
первый же ответ.
...
Рейтинг: 0 / 0
Искажение бинарных данных в _POST
    #38300217
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
ZvezdochetЭто не фокс перекодирует а msxml6.dll в лице Msxml2.ServerXMLHTTP.6.0 провайдера, как впрочем и все остальные. Там жестко зашито гнать все бинарные данные в UTF-8.Это фокс перекодирует, потому что COM по определению оперирует только юникодными строками. А бинарные данные в COM можно только в виде массива байт передать.
...
Рейтинг: 0 / 0
Искажение бинарных данных в _POST
    #38300219
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
ZvezdochetМне бы как-то этой чехарды с перекодированием избежать вообще.Ну это только не пользоваться COM объектами для отправки запросов.
...
Рейтинг: 0 / 0
Искажение бинарных данных в _POST
    #38300233
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
...
Рейтинг: 0 / 0
Искажение бинарных данных в _POST
    #38300251
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZvezdochetПрограмёрЯ смотрел )). И стало немного смешно (не от того, что там написано... там может и всё правильно, а просто от найденной альтернативы для base64). Итак, когда мы кодируем в base64, то объём передаваемых данных составляет 8/6 первоначального объёма. Перекодируя по указанному принципу в UTF-8, мы получаем base64 (точно также максимальное количество значащих бит равно 6 на один байт), только с кучей проверок на больше-меньше и разными приблудами.

А ЗАЧЕМ?!!!
Глубоко в детали не вникал но на вскидку заметил что 7и битные символы (коды 0-127) передаются как есть (пример 1) а 8и битные уже делятся на 2 байта. В base64 вроде только буквы и цифры допускаются. Так что по идее если количество байт в пакете с кодами > 127 преобладает, то кодированное в UTF-8 будет занимать меньше места. Может еще есть какие-то причины....

P.S. Мы уже основательно уходим от первоначальной темы. Мне бы как-то этой чехарды с перекодированием избежать вообще.

ну раз так, тогда можно вообще 7bit заюзать (это по поводу <128)

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
  /**
   * Функция кодирует строку в UTF7-IMAP для правильного общения с imap сервером
   * (требуется для русских символов)
   * 
   * @param string $str строка для кодирования
   * @return string Закодированая строка
   */
  public function encode7bit($str){
    return mb_convert_encoding($str, "UTF7-IMAP", $this->_encoding);
  }
  
  /**
   * Функция декодирует строку из UTF7-IMAP для правильного общения с imap сервером
   * (требуется для русских символов)
   * 
   * @param string $str строка для декодирования
   * @return string Декодированая строка
   */
  public function decode7bit($str){
    return mb_convert_encoding($str, $this->_encoding, "UTF7-IMAP");
  }



Почта так работает.:). А вообще, не знаю как сейчас (да и вообще как провайдеры специальные, которые файлы передают), но когда годика полтора назад пробовал вручную файл на сервер отправить (ajax) - столкнулся с тем, что отправить то можно что угодно, но вот только в строку, которая будет отпраляться зашить бинарные данные не возможно (у меня не получилось). Не знаю, может где тупил просто.
...
Рейтинг: 0 / 0
Искажение бинарных данных в _POST
    #38300304
Zvezdochet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowr uZvezdochet,

poWinHttp.setRequestHeader( "Content-Type", "multipart/form-data")
может еще boundary придется указать
первый же ответ.
Сори забыл отписать по этому предложению. Пробовал так:

Content=CHR(240)+CHR(15)+CHR(172)+CHR(237)+CHR(254)
Boundary = '--------------------------- 7d7d22e6070c'
CrLf=CHR(13)+CHR(10)

RequestBody="--" + Boundary + CrLf + 'Content-Disposition: form-data; name="data"' + CrLf +;
"Content-Type: application/x-zip-compressed" + CrLf + CrLf +;
Content + ;
CrLf + "--" + Boundary + "--"

poWinHttp = Createobject("Msxml2.ServerXMLHTTP.6.0")
poWinHttp.Open("POST", " http://10.10.1.1/test.php", .F.)
poWinHttp.SetRequestHeader("content-type", "multipart/form-data; boundary=" + Boundary)

poWinHttp.Send(RequestBody)

GotData=poWinHttp.ResponseText

результат тот же самый.
...
Рейтинг: 0 / 0
Искажение бинарных данных в _POST
    #38300321
Zvezdochet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?ZvezdochetМне бы как-то этой чехарды с перекодированием избежать вообще.Ну это только не пользоваться COM объектами для отправки запросов.
Понятно :( . Чтож, будем копать в других направлениях.

P.S. Всем спасибо. Тему можно закрывать.
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Искажение бинарных данных в _POST
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]