Помогите переделать строку вида %EE%CF%D7%C1%D1

Программирование на Active Server Pages и VBScript.
lpn_com
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.06.2007 (Ср) 16:32

Помогите переделать строку вида %EE%CF%D7%C1%D1

Сообщение lpn_com » 13.06.2007 (Ср) 16:50

например как из строки %EE%CF%D7%C1%D1%20%D0%C1%D0%CB%C1
получить строку "Новая папка"
может какиенить спец-функции есть
или если вручную, то как переделать "EE"->0xEE->"H"

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 13.06.2007 (Ср) 17:52

Если получаешь такую строку как запрос, то при Request.QueryString она будет выглядеть вот так некрасиво, но если запросить именованый параметр, то сконвертируется в читабельный вид.

lpn_com
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.06.2007 (Ср) 16:32

Сообщение lpn_com » 13.06.2007 (Ср) 18:18

ты наверно подумал что скипт выполняеться где нибудь на серваке :D
нет, скрипт пишется в файле vbs и просто открываеться на компе пользователя (пользователь эт я=)
на входе из буфера обмена извлекаеться ссылка, переделываеться, чтото вырезается чтото подставляется и в буфер обмена ложится новая ссылка

тут я уже начал думать как вручную все переделать
из строки %EE делаю строчку "&hEE"
потом chr(CInt("&hEE"))
все вроде работает, но используеться какаято другая таблица символов, только %20 правильно переделываеться :lol:

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 13.06.2007 (Ср) 18:32

lpn_com писал(а):ты наверно подумал что скипт выполняеться где нибудь на серваке :D

Именно так и подумал. Потому, что не было никакого уточнения.

lpn_com писал(а):нет, скрипт пишется в файле vbs и просто открываеться на компе пользователя (пользователь эт я=)
на входе из буфера обмена извлекаеться ссылка, переделываеться, чтото вырезается чтото подставляется и в буфер обмена ложится новая ссылка

А сразу писать в скипте как надо не получается?

lpn_com писал(а):тут я уже начал думать как вручную все переделать
из строки %EE делаю строчку "&hEE"
потом chr(CInt("&hEE"))
все вроде работает, но используеться какаято другая таблица символов, только %20 правильно переделываеться :lol:

Потому, что это возможно русский текст (предполагаю, что windows-1251) который в ASCII-кодировке преобразуется в соответствующие символы западно-европейской кодировки (windows-1252).

Или в шестнадцатиричном виде закодированы символы кириллицы в UTF-8. Тогда смотри алгоритм перевода в топике UNICODE, API и ENTITY.

lpn_com
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.06.2007 (Ср) 16:32

Сообщение lpn_com » 13.06.2007 (Ср) 18:51

дак а как сразу, сслыки же разные всегда, или чото я непонял)
не могу найти что за кодировка используеться
нигде EE не соответствует букве H :(

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 13.06.2007 (Ср) 19:31

lpn_com писал(а):не могу найти что за кодировка используеться
нигде EE не соответствует букве H :(

В UTF-8 не ANSI-символам соответствуют от 2 до 4 байт. Раскодировать надо всю строку, а не по одному символу.

lpn_com
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.06.2007 (Ср) 16:32

Сообщение lpn_com » 13.06.2007 (Ср) 20:25

но в урл то каждая %nn соответствует одной букве
я понимаю что юникод кодируеться не одним байтом, или имеешь ввиду что EE это 0E-0E и получаеться юникод или 00-EE просто первый байт откидываеться
гыгы, беда кароче))

нашел я реализацию функции URLDecode для VB
прекрасно работает, но не в той кодировке опять же
такую кодировку вроде FAR использует

ну например из %D2%E8%EF%E0+%EA%F0%F3%F2%FB%E5+%EB%E5%E3%E0%E2%FB%E5
получается Типа крутые легавые (другого примера не нашел :D )

а мне надо вот такое соответствие
'%E1%E2%F7%E7%E4%E5%F6%FA%E9%EA%EB%EC%ED%EE%EF%F0%F2%F3%F4
'АБВГДЕЖЗИЙКЛМНОПРСТ
Код: Выделить всё
Dim TempAns
Dim CurChr

TempAns=""
CurChr = 1

Do Until CurChr - 1 = Len(Str)
  Select Case Mid(Str, CurChr, 1)
    Case "+"
      TempAns = TempAns & " "
    Case "%"
      TempAns = TempAns & Chr( CInt ("&h" &  Mid(Str, CurChr + 1, 2)))
       CurChr = CurChr + 2
    Case Else
      TempAns = TempAns & Mid(Str, CurChr, 1)
  End Select

CurChr = CurChr + 1
Loop

Str = TempAns

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 13.06.2007 (Ср) 20:49

Ты бы вместо такого кол-ва текста запостил бы что есть на входе, что получается на выходе и что ожидается как приемлемый результат, а то угадывать что там у тебя творится сил нет.

lpn_com
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.06.2007 (Ср) 16:32

Сообщение lpn_com » 13.06.2007 (Ср) 21:16

ну вот тот код наверху, который я взял отсюда

берет строку %EE%CF%D7%C1%D1+%D0%C1%D0%CB%C1
и делает из нее оПЧБС РБРЛБ
а надо Новая папка

всяческие броузеры и качалки, переделывают как надо 8)

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 13.06.2007 (Ср) 21:25

lpn_com писал(а):и делает из нее оПЧБС РБРЛБ

Это в KOI8-u. Ищи таблицы перевода из KOI8 в windows-1251.

lpn_com
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.06.2007 (Ср) 16:32

Сообщение lpn_com » 13.06.2007 (Ср) 23:29

спасибо, skiperski, это действительно KOI8-u и надо переделывать в windows-1251
и как я понял, перекодировать методом расчета невозможно
короче я взял, два набора, и просто сопоставлял))

вот полный код
на входе предпологается что Str содержит URL
на выходе переделанная строка в TempAns
коды символов взял здесь
зыж не знаю как в VB сноски делать, поставил _ :oops:
иначеб форум растянулся)
Код: Выделить всё
Dim TempAns,CurChr,KOI8U,WIN

KOI8U="%E1%E2%F7%E7%E4%E5%F6%FA%E9%EA%EB%EC%ED%EE%EF%F0%F2%F3%F4_
%F5%E6%E8%E3%FE%FB%FD%FF%F9%F8%FC%E0%F1%C1%C2%D7%C7%C4_
%C5%D6%DA%C9%CA%CB%CC%CD%CE%CF%D0%D2%D3%D4%D5%C6%C8%C3%DE_
%DB%DD%DF%D9%D8%DC%C0%D1%A4%B4%A6%B6%A7%B7%AD%BD%C0%C1%C2%C3%C4%C5%C6%C7%C8_
%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF%E0%E1_
%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED_
%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF%BA%AA%B3%B2%BF%AF%B4%A5"

WIN=  "%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8_
%D9%DA%DB%DC%DD%DE%DF%E0%E1%E2%E3_
%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF_
%BA%AA%B3%B2%BF%AF%B4%A5%E1%E2%F7%E7%E4%E5%F6%FA%E9%EA%EB%EC_
%ED%EE%EF%F0%F2%F3%F4%F5%E6%E8%E3%FE%FB%FD%FF%F9%F8%FC%E0%F1%C1%C2%D7%C7%C4%C5%D6%DA_
%C9%CA%CB%CC%CD%CE%CF%D0%D2%D3_
%D4%D5%C6%C8%C3%DE%DB%DD%DF%D9%D8%DC%C0%D1%A4%B4%A6%B6%A7%B7%AD%BD"


TempAns=""
CurChr = 1

Do Until CurChr - 1 = Len(Str)
  Select Case Mid(Str, CurChr, 1)
    Case "+"
      TempAns = TempAns & " "
    Case "%"
        Pos=InStr(1,KOI8U,Mid(Str,CurChr,3),vbBinaryCompare)
        If Pos>0 Then
            TempAns = TempAns & Chr( CInt ("&h" &  Mid(WIN, Pos + 1, 2)))
        Else
            TempAns = TempAns & Chr( CInt ("&h" &  Mid(Str, CurChr + 1, 2)))
        End If
       CurChr = CurChr + 2
    Case Else
      TempAns = TempAns & Mid(Str, CurChr, 1)
  End Select

CurChr = CurChr + 1
Loop

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 14.06.2007 (Чт) 1:33

Главное чтобы работало. Но даже бегло взлянув на код можно заметить, что таблицы перевода какие-то странные: символы кодов повторяются. Далеко ходить не надо уже первый %E1 встречается в обеих таблицах по два раза. Где-то тут собака порылась. Ну и код далеко не оптимальный, но, повторюсь, главное чтобы работало.

lpn_com
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.06.2007 (Ср) 16:32

Сообщение lpn_com » 14.06.2007 (Чт) 10:01

Хм, действительно, и не только E1, странно, надо поискать другие таблицы или попытаться сделать их самостоятельно
насчет кода прав наверно, просто для меня он не совсем понятен, вопще это моя первая программа на VBScript :P

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 30.08.2007 (Чт) 17:54

Вообще существую функции Escape и Unescape
Я думаю подойти должны.


Вернуться в ASP и VBScript

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

    TopList