Показать сообщение отдельно
Старый 11.07.2006, 16:07   #11  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Aleksey_M
Щас еще глянул - в ie у меня стоит галка в настройках "конвертировать url адреса в utf-8", а оно на это забивает
У меня, увы, аналогично.
Цитата:
Сообщение от Aleksey_M
На стороне сервера принудительное конвертирование делать не хочется
Дык, как выясняется, в этом нет никакой особой необходимости.
Цитата:
Сообщение от belugin
вставьте в строку браузера javascript:alert(encodeURIComponent('запрос два')) и нажмите Enter
Спасибо, классно. А если еще убрать alert и оставить только javascript:encodeURIComponent('запрос два') , то в тело будет выдана строка, которую можно скопировать.

По этим мотивам родил VBA-шную функцию, возвращающую юникодное представление исходной нормальной строки:
Код:
'Код - Excel VBA
 
Function myEncodeURIComponent(SourceString) As String
 
    'в Tools/References должна быть включена ссылка на "Microsoft Internet Controls" (shdocvw.dll)
 
    Static IE As InternetExplorer 'после первого вызова функции IE сохраняется в памяти для последующих вызовов
 
    If IE Is Nothing Then
        'для первого вызова, пока IE еще не определен
        Set IE = New InternetExplorer
        IE.Visible = True 'на время отладки
    End If
 
    If SourceString = "" Then
        'если передана пустая строка, то выгружаем нашу служебную копию IE
        IE.Quit
        Set IE = Nothing
        myEncodeURIComponent = ""
        Exit Function
    End If
 
    IE.Navigate "javascript:encodeURIComponent('" & SourceString & "')" 
    'Thanks to belugin
 
    myEncodeURIComponent = IE.Document.Body.InnerText
 
End Function
Получилось несколько заднепроходно, хотя в принципе вполне работоспособно (для тестового, непромышленного использования - хотя иное и не предполагается).

Однако, может быть, можно придумать что-нибудь более элегантное? (т.е. без подъёма доп. копии IE только для того, чтобы конвертить строки в юникод). В Excel VBA ничего похожего не нашёл, так же, как не нашёл библиотеку для References, "отвечающую" за javascript. Может быть, есть какое-нибудь гуманное конвертило в юникод, которое можно встроить в VBA-функцию?