UTF8 -> WIN1251 | |
---|---|
ВалШебНик Автор Сообщений: 10 Откуда: Ставрополь Дата регистрации: 29.01.2009 |
Доброго дня!
Сломал голову как почесть русские символы: Делаю запрос к сервису SOAP oHTTPS = NEWOBJECT("MSXML2.XMLHTTP") oHTTPS.Open("POST","https://socpwebservice.XXXXX.ru/service1.asmx",.f.) oHTTPS.SetRequestHeader("Content-Type","text/xml; charset=utf-8") oHTTPS.Send("<?xml version="1.0" encoding="utf-8"?>") cResponseTxt = oHTTPS.ResponseBody Получаю ответ: <?xml version="1.0" encoding="utf-8"?> <soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/xmlschema"> <soap:body> <socp_send_paymentresponse xmlns="http://socpwebservice.voz.ru/"> <socp_send_paymentresult>0</socp_send_paymentresult> <ext_response /> <str_error>α?ß?α±α+α≤α° ß?α?ß:ß?α°α?ατα?α±ß? α⌡α>α°ß'αταα° α? α│α?α?: - (α⌡α>α°ß'ατα α?ατ α?α°αⁿα?ατα?)</str_error> <n_maket_out></n_maket_out> <d_maket_out /> </socp_send_paymentresponse> </soap:body> </soap:envelope> Вот эту сроку <str_error> прочесть ну никак. Перебрал варианты с strconv, не помогло никак. Дорогие френды, может у кого-нибудь мелькнет идея Я отдельно ее загонял в сторонние программки декодирования, получается, но какая то часть узнаваемых слов, часть ерунда какая-то... Спасибо! |
Re: UTF8 -> WIN1251 | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
Положите ответ сервиса в файлик и полученный файлик приложите к сообщению. Это для сохранения кодировки текста.
------------------ Лень - это неосознанная мудрость. |
Re: UTF8 -> WIN1251 | |
---|---|
ВалШебНик Автор Сообщений: 10 Откуда: Ставрополь Дата регистрации: 29.01.2009 |
Вот файл ответа сервиса
|
Re: UTF8 -> WIN1251 | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
-
Исправлено 1 раз(а). Последнее : Taran, 20.08.11 16:30 |
Re: UTF8 -> WIN1251 | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Напишите авторам сервиса, что они выдают неверные ответы. Это вообще НЕКОРРЕКТНЫЕ UTF8 коды. Судя по всему, они где-то напутали, и вместо кириллических символов, которые в UTF8 выглядят как сочетания байт (в шестнадцатеричном виде) D0/D1/D2/D3+8x/9x/Ax/Bx напихали чушь в виде сочетаний байт F0/F1/F2/F3+8x/9x/Ax/Bx.
Помимо этого, они ещё похоже где-то ДО того провернули двойную конвертацию русских кодировок, в результате чего потеряли часть символов (то что и в фоксе зачастую случается, если работать с кириллицей при Codepage<>1251). Максимум что можно "извлечь" из данной строки, это то что даёт выражение (для VFP9 - для более старых строки замены/заменителем придётся описывать по иному)
Вполне возможно что сервису "сносит крышу" тот способ которым вы делаете запрос - с SOAP вообще-то стараются не работать на столь низком уровне - используют ту же COM прослойку MS SOAP Toolkit... ------------------ WBR, Igor |
Re: UTF8 -> WIN1251 | |
---|---|
Chemberzhy Сообщений: 13142 Откуда: Измаил Дата регистрации: 28.04.2009 |
|
Re: UTF8 -> WIN1251 | |
---|---|
ВалШебНик Автор Сообщений: 10 Откуда: Ставрополь Дата регистрации: 29.01.2009 |
Спасибо огромное.
Тоже подумал - что наверное надо использовать SOAP. Буду пробовать через него. |
Re: UTF8 -> WIN1251 | |
---|---|
ВалШебНик Автор Сообщений: 10 Откуда: Ставрополь Дата регистрации: 29.01.2009 |
Вот же:
пробую функцию - где пара аргументов передается - все ОК. Даже кодировка теперь человеческая, то есть читаемая А вот функция, где 36 параметров - стоит ругань Too many arguments Перебрал все. Даже так forum.foxclub.ru Фиг. Ставлю меньше - летит ошибка SOAP - неверное число параметров Я с ума сойду |
Re: UTF8 -> WIN1251 | |
---|---|
ВалШебНик Автор Сообщений: 10 Откуда: Ставрополь Дата регистрации: 29.01.2009 |
Добрый день.
Вопрос: Вот реальная функция, которая лежит на сервисе: POST /Service1.asmx HTTP/1.1 Host: socpwebservice.xxx.ru Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://socpwebservice.xxx.ru/SOCP_Send_Payment" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <SOCP_Send_Payment xmlns="http://socpwebservice.xxx.ru/"> <type_maket_in>string</type_maket_in> <br_in>string</br_in> <n1_in>string</n1_in> <nd_in>string</nd_in> <cy_in>string</cy_in> <dd_wr_in>string</dd_wr_in> <ls_in>string</ls_in> <co_in>string</co_in> <kp_in>string</kp_in> <u1_in>string</u1_in> <u2_in>string</u2_in> <u3_in>string</u3_in> <n3_in>string</n3_in> <r0_in>string</r0_in> <r1_in>string</r1_in> <r2_in>string</r2_in> <r3_in>string</r3_in> <r4_in>string</r4_in> <r5_in>string</r5_in> <r6_in>string</r6_in> <r7_in>string</r7_in> <r8_in>string</r8_in> <r9_in>string</r9_in> <na_in>string</na_in> <py_in>string</py_in> <sys_id_in>string</sys_id_in> <fio_user_in>string</fio_user_in> <provider_id_in>string</provider_id_in> <service_id_in>string</service_id_in> <addr_user_in>string</addr_user_in> <out_id_in>string</out_id_in> <w2_in>string</w2_in> <ext_response>string</ext_response> <str_error>string</str_error> <n_maket_out>string</n_maket_out> <d_maket_out>string</d_maket_out> </SOCP_Send_Payment> </soap:Body> </soap:Envelope> Здесь ей надо передать 36 параметров. Я делаю вот так: oSoapClient = CREATEOBJECT("MSSOAP.SoapClient30") oSoapClient.MSSoapInit("https://socpwebservice.xxx.ru/Service1.asmx?WSDL") описываю переменные Par1 = Par2 = .. Par36 = и пытаюсь выполнить функцию oSoapClient.SOCP_Send_Payment(Par1,Par2,Par3,Par4...Par36) Еще на этапе компиляции вылетаю ошибка - TOO MANY ARGUMENTS Если вот так: lccommand = "oSoapClient.SOCP_Send_Payment(Par1,Par2,Par3,Par4...Par36)" &lccommand То эта ошибка происходит при выполнении кода. Тут в силу некоторых особенностей - я повлиять на сервис не могу, а есть реально работающий код на - если не изменяет память - на Pascal Где мои грабли? Что я делаю не так? |
Re: UTF8 -> WIN1251 | |
---|---|
ВалШебНик Автор Сообщений: 10 Откуда: Ставрополь Дата регистрации: 29.01.2009 |
ВСЕ! Добился!
Прокладку MSSOAP к сожалению использовать невозможно по причине ограничения фокса на передачу 26 параметров, а нужно 36 (см.выше). Огромное спасибо - Игорю Королёву - навели на мысль И Владу Колосову - за его примеры (кстати тоже работает напрямую) Работающий код: oHTTPS = NEWOBJECT("MSXML2.XMLHTTP") oHTTPS.Open("POST","https://socpwebservice.voz.ru/Service1.asmx?WSDL",.f.) oHTTPS.SetRequestHeader("Content-Type","text/xml; charset=utf-8") oHTTPS.SetRequestHeader("Content-length",LTRIM(STR(LEN(cSendBody)))) TRY oHTTPS.Send(cSendBody) CATCH lExitFunction = .T. ENDTRY IF oHTTPS.Status == 200 cResponseTxt = LOWER(ALLTRIM(oHTTPS.Responsetext)) ENDIF Отчет читается, все ок! Всем спасибо принявшим участие в обсуждении. Исправлено 1 раз(а). Последнее : ВалШебНик, 21.08.11 14:39 |
Re: UTF8 -> WIN1251 | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Да, к сожалению у фокса есть такое ограничение по параметрам
Напрямую работать - оно можно, просто гарантировано сложнее будет - самому придётся и всякими "конвертациями" заниматься (из которых преобразование UTF8 в ANSI есть самое простое и безобидное), и SOAP протокол реализовывать - но действительно бывают ситуации, когда по иному никак ------------------ WBR, Igor |
Re: UTF8 -> WIN1251 | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
А как определить, что кодировка UTF8?
нам шлют одни в UTF8, другие в WIN1251 Пока не определились, но пока считаем, что мы должны отсылать в той кодировке, откуда получили. Т.е. от ИК хотелось бы узнать обратный код к STRCONV(CHRTRAN(m.lc, 0hf0f1f2f3,0hd0d1d2d3), 11) Симметрично, получил, подправил и отослал Исправлено 2 раз(а). Последнее : Ydin, 23.08.19 10:50 |
Re: UTF8 -> WIN1251 | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
|
Re: UTF8 -> WIN1251 | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
2 of63
Подожду, я слабонервный. Твой код интересен. Но по-быстрому не прочтешь. Классно - комменты. Я хочу подождать ИК. Мне сейчас другое бы успеть вовремя Исправлено 1 раз(а). Последнее : Ydin, 23.08.19 11:11 |
Re: UTF8 -> WIN1251 | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Для комментов и запостил, и чтобы посмотреть на "ИИ определения кодировки" изнутри, моими глазами
() Игорь, конечно, классный мембер, но основной форум он развратил... |
Re: UTF8 -> WIN1251 | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
По тему ключевое
И он автор. Везде он первый! Как это? |
Re: UTF8 -> WIN1251 | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> Как это?
Сам говоришь "Я хочу подождать ИК", типа думать не хочу, некогда, ИК решит. Ну да, решит, как за детей малых ) |
Re: UTF8 -> WIN1251 | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Оффа, не обижайся. Спасибо, у меня вера, что твое поможет!
Но там не один вопрос, еще я жду от своих, они может сами это решат. Т.е. мне можно подождать. Сейчас от меня ждут результата вне этого вопроса |
Re: UTF8 -> WIN1251 | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Не обижаюсь я, пока. На свой кодЮ на его оценку, оценку я знаю - чужой код г.вно, решение неправильное, автора кода повесить на вонючей веревке, код переписать на новоязе. Ненужное подчеркнуть )
Просто ИК работает на англичанку, перегружен, и тут мы, с ерундой |
Re: UTF8 -> WIN1251 | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Если в файле нет BOM или, если это не файл а, к примеру, письмо или html страница, или xml и там нет соответствующих заголовков - то остаётся лишь эвристический анализ. Много лет назад печатался в какой-то компьютерной газете (ещё бумажной) алгоритм подобной эвристики от автора одной из программ-декодеров, ну тех что сами "угадывали" кодировку текста. Увы, сейчас не могу найти... Даже статью про "кракозябры" нехорошие пассивные гомосексуалисты зачем-то удалили из википедии
Просто в наше время проще организационно решить такую проблему, нежели пытаться "угадывать" кодировку. Тем более что эффективно подобная эвристика работает лишь на достаточно больших объёмах текста написанных на одном языке, с минимумом всяких аббревиатур и сокращений. P.S. Код оффы "не смотрел, но осуждаю" А если серьёзно, то проще и спокойнее решить проблему не программным способом (прикрывая идиотизм начальства и каких-то юзеров). Самая известная утилита-декодер "штирлиц" почила в бозе в далёком 2001 году - и это правильно. P.P.S. И добавить нечего Цитата:Завтра начнут ещё и фотографии этих самых текстов присылать (тыжпрограммист, разберёшься), если сразу на место не поставить "вредителей" ------------------ WBR, Igor |
© 2000-2024 Fox Club  |