URL-адрес цели C с вертикальными трубками/полосами

Я пытаюсь иметь вертикальные каналы в URL-адресе

Входная строка: http://testURL.com/Control?command=dispatch|HOME|ABC:User

-(NSString *)getURLEncodedString:(NSString *)stringvalue{

NSMutableString *output = [NSMutableString string];
const unsigned char *source = (const unsigned char *)[stringvalue UTF8String];
int sourceLen = strlen((const char *)source);
for (int i = 0; i < sourceLen; ++i) {
    const unsigned char thisChar = source[i];
    if (thisChar == ':' || thisChar == '/' || thisChar == '?' || thisChar == '=' || thisChar == '|' || thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' ||
               (thisChar >= 'a' && thisChar <= 'z') ||
               (thisChar >= 'A' && thisChar <= 'Z') ||
               (thisChar >= '0' && thisChar <= '9')) {
        [output appendFormat:@"%c", thisChar];
    } else {
        [output appendFormat:@"%%%02X", thisChar];
    }
}
return output;
}

Выходная строка после вызова вышеуказанного метода: http://testURL.com/Control?command=dispatch|HOME|ABC:User%20Name

Теперь, если я передам приведенную выше строку кодирования в [[NSURL URLWithString:encodedString];

Я получаю Domain=NSURLErrorDomain Code=-1000 "неверный URL" UserInfo=0xae9d760 {NSUnderlyingError=0xaec8ed0 "неверный URL", NSLocalizedDescription=плохой URL}

Любые данные об этом, ребята? Я хочу, чтобы URL-адрес выглядел как encodedString.

Спасибо!


person Mobilewits    schedule 06.06.2013    source источник
comment
что ты собираешься с этим делать? '|' не является допустимым символом в URL-адресе, поэтому он отклоняется как неверный URL-адрес.   -  person gaige    schedule 06.06.2013
comment
возможный дубликат символ вертикальной трубы, не обнаруженный в NSURL   -  person Mobilewits    schedule 06.06.2013


Ответы (1)


Я действительно не вижу причин для кодирования/экранирования вашей строки вручную... В любом случае, это будет работать нормально:

NSString *urlString = @"http://testURL.com/Control?command=dispatch|HOME|ABC:User Name";
NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

Что выводит:

http://testURL.com/Control?command=dispatch%7CHOME%7CABC:User%20Name

Похоже, что NSURL все-таки не любит вертикальные полосы, которые вы не закодировали в своем методе и получили код bad URL.

person Alladinian    schedule 06.06.2013
comment
Мне нужны вертикальные полосы в URL :). Не %7С. Извините, надо было четко указать. - person Mobilewits; 06.06.2013
comment
Тогда вам придется найти другой класс для обработки URL-адресов, потому что NSURL не может... - person Alladinian; 06.06.2013
comment
Я использовал шифрование ISOLatin. Изменил его на NSUTF8StringEncoding. Мой вопрос теперь дублируется. - person Mobilewits; 06.06.2013