Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 WinHttpRequest и кодировка  [new]
Pavel_yu
Member

Откуда:
Сообщений: 79
Использую для обращения к http - серверу WinHttpRequest примерно так:
	DECLARE @url varchar(300)  
	DECLARE @win int 
	DECLARE @hr  int 
	SET @url = 'http://localhost/query.asp'

	EXEC @hr=sp_OACreate 'WinHttp.WinHttpRequest.5.1',@win OUT 
	IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 

	EXEC @hr=sp_OAMethod @win, 'Open',NULL,'GET',@url,'false'
	IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 

	EXEC @hr=sp_OAMethod @win,'Send'
	IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 

	EXEC @hr=sp_OAGetProperty @win,'ResponseText'
	IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

	EXEC @hr=sp_OADestroy @win 
	IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 


При этом кодировка сбивается. (русские буквы нечитабельны, но разными символами)
Использовал в процедуре sp_OAGetProperty вместо ResponseText свойство ResponseBody. процедура возвращала байты (image или varbinary(max)) и если эти байты конвертнуть в varchar(max), то получался нормальный текст с русскими буквами. Но это когда html сервер возвращал маленькую xml. Потом стал использовать другой html сервер, который стал возвращать больше xml, ResponseText возвращал как и раньше, а ResponseBody возвращал NULL. Почему так? Из-за того, что xml стал больше или может зависить от сервера?
Или с ResponseBody вообще лучше не работать? Тогда как использовать правильную кодировку при ResponseText?
6 апр 12, 15:16    [12376835]     Ответить | Цитировать Сообщить модератору
 Re: WinHttpRequest и кодировка  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
Pavel_yu
возвращала байты (image или varbinary(max)) и эти байты конвертнуть в varchar(max)
FacePalm.jpg
Да, да, строки можно только однозначно представить в бинарном виде. Канечна.

Pavel_yu, вам делать явно нечего.

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

А вы этот механизм ломаете, теряя кодировку и делая дополнительные конвертации.
Учите матчать.
6 апр 12, 18:53    [12378230]     Ответить | Цитировать Сообщить модератору
 Re: WinHttpRequest и кодировка  [new]
lgdmitry
Member

Откуда: Energodar
Сообщений: 48
    DECLARE @win int 
    DECLARE @hr  int 
    DECLARE @text varchar(max)
    declare @url varchar(2000) = 'http://www.postman.ua/services_prices/tracking?company_name=TEL&order_number=442042'

    EXEC @hr=sp_OACreate 'WinHttp.WinHttpRequest.5.1',@win OUT 
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

    EXEC @hr=sp_OAMethod @win, 'Open',NULL,'GET',@url,'false'
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

    EXEC @hr=sp_OAMethod @win,'Send'
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

    EXEC @hr=sp_OAGetProperty @win,'ResponseText',@text OUTPUT
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

    EXEC @hr=sp_OADestroy @win 
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 
    
    select @text


не подскажите почему при том же самом запросе мне возвращает
0x8004271A ODSOLE Extended Procedure Error in srv_convert. NULL 0
26 мар 13, 19:26    [14098753]     Ответить | Цитировать Сообщить модератору
 Re: WinHttpRequest и кодировка  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
11404789
27 мар 13, 18:24    [14103685]     Ответить | Цитировать Сообщить модератору
 Re: WinHttpRequest и кодировка  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
lgdmitry
    DECLARE @text varchar(max)
    EXEC @hr=sp_OAGetProperty @win,'ResponseText',@text OUTPUT
В старом OLE нельзя использовать новые типы данных.
Это можно обойти, если делать через INSERT EXEC. Но это может создать другие проблемы.
Можете посмотреть пример 10499359
27 мар 13, 18:31    [14103713]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить