У меня странная проблема с моей текущей разработкой приложения.Цель моего приложения - получить несколько веб-сайтов 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 получен веб-сервисом.некоторые специальные символы, кажется, нарушают передачу, например, ";"sign.
, поэтому я искал в Интернете и нашел «метод 1», проанализировал полученные веб-сайты xhtml в ASCII и провел специальный самодельный разговор с символами - это работало для большинства знаков, но, например, «€»не работает и не был правильно получен веб-службой.но в этом случае все перешло к веб-сервису - но, к сожалению, с неправильными символами.
Следующей попыткой был «метод 3», я сохранил кодирование сайтов при их получении и позже использовал эту информацию.но здесь была та же проблема, что и с кодировкой UTF8: передача прерывалась некоторыми специальными символами ...
"метод 4" и "метод 5" не работали также ..
вопрос: почему прерывается передача во время моего HTTP POST к веб-службе?