powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Нужны две функции преобразования
12 сообщений из 12, страница 1 из 1
Нужны две функции преобразования
    #37942037
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужна функция чтоб "%D0B0" конвертировала в "а" и обратно
Делаю вебсервер. Замучался вычеслять эти "%" символы...
...
Рейтинг: 0 / 0
Нужны две функции преобразования
    #37942078
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159"%D0B0" конвертировала в "а" и обратно???
русская "а" кодируется как %C1
...
Рейтинг: 0 / 0
Нужны две функции преобразования
    #37942120
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот по этой причине у меня работает, у двох друзей работает, а у третего не работает. Нужно уметь разбирать кодировку

Например после charset работает страница нормально на айфоне
HTML = "<html><head><title>Музичний бумбокс</title><meta http-equiv=" & Chr(34) & "Content-Type" & Chr(34) & " content=" & Chr(34) & "text/html; charset= windows-1251 " & Chr(34) & "></head><body>"

Хотел было уже свои кодировки выдумать, но бравзер игнорирует и переделывает кирилицу в %ХХХХ когда принимаю значения на


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  WSock(Index).GetData RData, 8
  If RData Like "GET * HTTP/1.?*" Then
    RequestedFile = LeftRange(RData, "GET ", " HTTP/1.", , 1)
    If InStr(1, RequestedFile, "/../") > 0 Or InStr(1, RequestedFile, "/./") > 0 Or InStr(1, RequestedFile, "*") > 0 Or InStr(1, RequestedFile, "?") > 0 Or RequestedFile = "" Then
      Header = "HTTP/1.0 404 Not Found" & Chr(10) & "Server: " & ServerName & Chr(10) & Chr(10)
      CInfo(Index).TotalLength = Len(Header)
      WSock(Index).SendData Header
    Else
      CompletePath = Replace(WebRoot & Replace(RequestedFile, "/", "\"), "\\", "\")
.....



А вот те мои самодельные которые не пригодились

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function KonvertL10To16(ByVal Symv As Long) As String
  Dim k1 As Long, k2 As Long
  k1 = Symv \ 16
  k2 = Symv - (k1 * 16)
  KonvertL10To16 = Chr(k1 + 65) & Chr(k2 + 65)
End Function
Public Function KonvertL16To10(ByVal Symv As String) As Long
  KonvertL16To10 = ((Asc(Left(Symv, 1)) - 65) * 16) + ((Asc(Mid(Symv, 2, 1)) - 65))
End Function
...
Рейтинг: 0 / 0
Нужны две функции преобразования
    #37942133
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей159,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Function decodeURI(str As String) As String
    Dim ScriptEngine As Object ' ScriptControl
    Dim decoded As String
    Set ScriptEngine = CreateObject("ScriptControl")
    ScriptEngine.Language = "JScript"
    ScriptEngine.AddCode "function decode(str) {return decodeURIComponent(str);}"
    decoded = ScriptEngine.Run("decode", str)
    decodeURI = decoded
End Function

Function encodeURI(str As String) As String
    Dim ScriptEngine As Object ' ScriptControl
    Dim encoded As String
    Set ScriptEngine = CreateObject("ScriptControl")
    ScriptEngine.Language = "JScript"
    ScriptEngine.AddCode "function encode(str) {return encodeURIComponent(str);}"
    encoded = ScriptEngine.Run("encode", str)
    encodeURI = encoded
End Function


Код: vbnet
1.
2.
3.
4.
5.
?encodeURI("абвгд")
%D0%B0%D0%B1%D0%B2%D0%B3%D0%B4

?decodeURI("%D0%B0%D0%B1%D0%B2%D0%B3%D0%B4")
абвгд
...
Рейтинг: 0 / 0
Нужны две функции преобразования
    #37942137
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и http://msdn.microsoft.com/ru-ru/library/90d18ktz, методы URLEncode/URLDecode
...
Рейтинг: 0 / 0
Нужны две функции преобразования
    #37942161
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного по-другому и короче
Код: vbnet
1.
2.
3.
4.
5.
6.
Function encodeURI(str As String) As String
With CreateObject("ScriptControl")
    .Language = "JScript"
    encodeURI = .Eval("this").encodeURIComponent(str)
End With
End Function

С decode аналогично.
Если функции будут вызываться много раз, надо сделать объект .Eval("this") статическим и внешним для обеих процедур.
...
Рейтинг: 0 / 0
Нужны две функции преобразования
    #37942203
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КазанскийНемного по-другому и короче
!!
красиво !
спасибо ! тоже "возьму на вооружение" :))

т.е., таким образом .Eval("this").... - можно любую JScript-функцию вызвать ?
...
Рейтинг: 0 / 0
Нужны две функции преобразования
    #37943512
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Я воспользовался способом qwerty112
Красиво! Быстро работает )) Версия "Казанский" оригинальная.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public ScriptEngine As Object ' ScriptControl
Public Function ActivateScriptControl()
  Set ScriptEngine = CreateObject("ScriptControl")
    ScriptEngine.Language = "JScript"
    ScriptEngine.AddCode "function decode(str) {return decodeURIComponent(str);}"
    ScriptEngine.AddCode "function encode(str) {return encodeURIComponent(str);}"
End Function
Public Function DeactivateScriptControl()
  Set ScriptEngine = Nothing
End Function

Function decodeURI(str As String) As String
    decodeURI = ScriptEngine.Run("decode", str)
End Function

Function encodeURI(str As String) As String
    encodeURI = ScriptEngine.Run("encode", str)
End Function
...
Рейтинг: 0 / 0
Нужны две функции преобразования
    #37943595
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Устроил тараканьи бега, мой таракан бегает на 30% быстрее
Public ScriptEngine As Object ' ScriptControl
Public This As Object

Public Function ActivateScriptControl()
Set ScriptEngine = CreateObject("ScriptControl")
ScriptEngine.Language = "JScript"
ScriptEngine.AddCode "function decode(str) {return decodeURIComponent(str);}"
ScriptEngine.AddCode "function encode(str) {return encodeURIComponent(str);}"
Set This = ScriptEngine.Eval("this")
End Function
Public Function DeactivateScriptControl()
Set This = Nothing
Set ScriptEngine = Nothing
End Function

Function decodeURI(str As String) As String
decodeURI = ScriptEngine.Run("decode", str)
End Function

Function encodeURI(str As String) As String
encodeURI = ScriptEngine.Run("encode", str)
End Function

Function encodeURI1(str As String) As String
encodeURI1 = This.encodeURIComponent(str)
End Function

Function decodeURI1(str As String) As String
decodeURI1 = This.decodeURIComponent(str)
End Function

Sub test()
Dim s$, t!, i&
s = "Спасибо. Я воспользовался способом qwerty112"
ActivateScriptControl
If s <> decodeURI(encodeURI(s)) Then Stop
DoEvents
t = Timer
For i = 1 To 10000
decodeURI encodeURI(s)
Next
Debug.Print "qwerty112", Timer - t

If s <> decodeURI1(encodeURI1(s)) Then Stop
DoEvents
t = Timer
For i = 1 To 10000
decodeURI1 encodeURI1(s)
Next
Debug.Print "Казанский", Timer - t

DeactivateScriptControl
End Sub

====Результат (P3-500, Win2k)====

qwerty112 6,273438
Казанский 4,382813
Любая jscript функция на работает, однако родственные работают:
this.encodeURI(str)
this.escape(str)
...
Рейтинг: 0 / 0
Нужны две функции преобразования
    #37943703
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мои папки на украинском/русском языке (кирилица) и на англ (латынь).
обращение через URL "/українська музика/Ірина Білик" декодируется с %хухры на "D:\Музика\українська музика\Ірина Білик", выполняется Dir чтение и формируются HTML данные которые потом передаю на сокет. Подход decodeURI и encodeURI полнофункционально работает только на Chrome. Используя Mozilla при декодировке %хухры выскакивает ошибка в програме. Опера вобше глухарь.

Я задал в head: "<meta http-equiv=" & Chr(34) & "Content-Type" & Chr(34) & " content=" & Chr(34) & "text/html; charset=windows-1251" & Chr(34) & ">". Если не вписать "charset=windows-1251", то будут карявки вместо символов.

Пока не понятно возможно ли заставить хотяб мрзилу и оперу справляться с кодировкай не портя ее первоначальный вид. Буду пробовать в ответ "HTTP/1.0 200 OK" добавлять "Content-Type: text/html; charset=windows-1251". О результате напишу.
...
Рейтинг: 0 / 0
Нужны две функции преобразования
    #37943705
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безнадежные бравзера. Теперь понятно почему файлы и название страниц при создании переименовывают на латынь URL. Кодировки разные
...
Рейтинг: 0 / 0
Нужны две функции преобразования
    #37945219
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,
>Я задал в head: "<meta http-equiv=" & Chr(34) & "Content-Type" & Chr(34) & " content=" & Chr(34) & "text/html; charset=windows-1251" & Chr(34) & ">". Если не вписать "charset=windows-1251", то будут карявки вместо символов.

Этого мало, надо чистый лист взять и изменить кодировку на кириллицу и затем писать
а вообще кто её придумал эту кодировку сколько юзеров на эти грабли натыкались
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Нужны две функции преобразования
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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