iphone: кодировка nsdata после поиска - почему так странно?

У меня странная проблема с моей текущей разработкой приложения. Целью моего приложения является получение нескольких веб-сайтов xhtml через NSURLSConnection (да, без инфраструктуры ASIHTTPRequest), сохранение их в массиве и публикация их через NSURLConnection в веб-сервис, который анализирует некоторую информацию для меня.

проблема: у меня действительно странные проблемы с кодированием и я пробовал много обходных путей.

получение веб-сайта xhtml:

 (void)connection:(CustomURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

CFStringEncoding cfEncoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef) [response textEncodingName]);
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding);

[lastSearch.dataObjectsEncoding setObject:[response textEncodingName] forKey:connection.tag ];

[receivedData setLength:0];}

После этого я работаю с данными и хочу отправить их в веб-службу. для этого я делаю некоторые приготовления:

способ 1:

    NSMutableString *data = [[NSMutableString alloc] initWithData:theData encoding:NSASCIIStringEncoding];
NSArray *escapeChars = [NSArray arrayWithObjects: @"€", @"\n", @";" , @"/" , @"?" , @":" ,
                        @"@" , @"&" , @"=" , @"+" ,
                        @"$" , @"," , @"[" , @"]",
                        @"#", @"!", @"'", @"(",
                        @")", @"*", nil];

NSArray *replaceChars = [NSArray arrayWithObjects: @"%E2%82%AC", @"", @"%3B" , @"%2F" , @"%3F" ,
                         @"%3A" , @"%40" , @"%26" ,
                         @"%3D" , @"%2B" , @"%24" ,
                         @"%2C" , @"%5B" , @"%5D", 
                         @"%23", @"%21", @"%27",
                         @"%28", @"%29", @"%2A", nil];

int len = [escapeChars count];
int i;
for(i = 0; i < len; i++)
{

    [data replaceOccurrencesOfString: [escapeChars objectAtIndex:i]
                          withString:[replaceChars objectAtIndex:i]
                             options:NSLiteralSearch
                               range:NSMakeRange(0, [data length])];
}

метод 2:

NSMutableString *data = [[NSMutableString alloc] initWithData:theData encoding:NSUTF8StringEncoding];

метод 3:

CFStringEncoding cfEncoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef) [lastSearchParam.dataObjectsEncoding objectForKey:key]);
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding);
NSMutableString *data = [[NSMutableString alloc] initWithData:theData encoding: encoding];

метод 4:

NSString *data = [[NSString alloc] initWithBytes:theData length:[theData length] encoding:NSUTF8StringEncoding];

метод 5:

NSString *data2 = [data stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

после того, как я добавил некоторые вещи, я хочу HTTP POST полученный XHTML к веб-сервису. чтобы закодировать все параметры и полученные данные, я добавляю все в большую строку и делаю

NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

большинство сайтов в UTF-8. поэтому я впервые попробовал "метод 2". если я NSLog все полученные данные, все выглядит нормально, я могу просмотреть правильный исходный код HTML, даже знак € отображается правильно. но если я передаю HTTP POST в веб-сервис, не весь XHTML получает веб-сервис. некоторые специальные символы, кажется, нарушают передачу, например, ";" знак.

поэтому я искал в интернете и нашел "метод 1", проанализировал полученные веб-сайты xhtml в ASCII и провел самодельный специальный разговор с символами - это работало для большинства знаков, но, например, "€" не работало и не правильно полученные веб-сервисом. но в этом случае все перешло к веб-сервису - но, к сожалению, с неправильными символами.

Следующей попыткой был "метод 3", я сохранил кодировку сайтов во время их получения и позже использовал эту информацию. но здесь была та же проблема, что и с кодировкой UTF8: передача прерывалась некоторыми специальными символами...

"метод 4" и "метод 5" не сработали.

вопрос: почему прерывается передача во время моего HTTP POST к веб-сервису?

0 ответов

Другие вопросы по тегам