Как сконвертировать строку в требуемый вид Documents%20and%20Settings/%C4%E8%EC%E0/%D0... - VB
Формулировка задачи:
Есть путь к файлу:
C:\Documents and Settings\Дима\Рабочий стол\sanctuary.wav
Правильная строка для IVR должна быть (это из лога, когда я подаю на вход только имя файла с путем, а конструируется все в C++ dll):
"ivr:
"
Но мне надо в нек. случаях сконструировать подобное выражение в VB6 и подать ivrXml целиком.
Ну накатал ф-цию наспех:
XML русский язык в чистом виде не ест, хочет хексы с процентами.
Как эту абракодабру получить как он хочет?
C:\Documents and Settings\Дима\Рабочий стол\sanctuary.wav
Правильная строка для IVR должна быть (это из лога, когда я подаю на вход только имя файла с путем, а конструируется все в C++ dll):
"ivr:
Но мне надо в нек. случаях сконструировать подобное выражение в VB6 и подать ivrXml целиком.
Ну накатал ф-цию наспех:
Ну и естественно накололся с приведенным вверху примером russian path:
XML русский язык в чистом виде не ест, хочет хексы с процентами.
Как эту абракодабру получить как он хочет?
Решение задачи: «Как сконвертировать строку в требуемый вид Documents%20and%20Settings/%C4%E8%EC%E0/%D0...»
textual
Листинг программы
PString PURL::TranslateString(const PString & str, TranslationType type) { PString xlat = str; /* Characters sets are from RFC2396. The EBNF defines lowalpha, upalpha, digit and mark which are always allowed. The reserved list consisting of ";/?:@&=+$," may or may not be allowed depending on the syntatic element being encoded. */ PString safeChars = "abcdefghijklmnopqrstuvwxyz" // lowalpha "ABCDEFGHIJKLMNOPQRSTUVWXYZ" // upalpha "0123456789" // digit "-_.!~*'()"; // mark switch (type) { case LoginTranslation : safeChars += ";&=+$,"; // Section 3.2.2 break; case PathTranslation : safeChars += ":@&=+$,|"; // Section 3.3 break; case ParameterTranslation : /* By strict RFC2396/3.3 this should be as for PathTranslation, but many URI schemes have parameters of the form key=value so we don't allow '=' character in the allowed set. Also, including one of "@,|" is incompatible with some schemes, leave those out too. */ safeChars += ":&+$"; break; case QuotedParameterTranslation : safeChars += "[]/:@&=+$,|"; return str.FindSpan(safeChars) != P_MAX_INDEX ? str.ToLiteral() : str; default : break; // Section 3.4, no reserved characters may be used } PINDEX pos = (PINDEX)-1; while ((pos = xlat.FindSpan(safeChars, pos+1)) != P_MAX_INDEX) xlat.Splice(psprintf("%%%02X", (BYTE)xlat[pos]), pos, 1); return xlat; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д