ios - ¿Cómo publicar una cadena con caracteres especiales y lenguaje tailandés usando el análisis XML en Objective C?
objective-c xml-parsing (2)
Soy nuevo en iOS y tengo problemas para publicar cadenas que contengan caracteres especiales.
Mi código es así en DidFinishLoading:
NSXMLParser *myNSXMLParserPostObj=[[NSXMLParser alloc]initWithData:myNSMDataPostFromServer];
myNSXMLParserPostObj.delegate=self;
[myNSXMLParserPostObj parse];
NSLog(@"%@",myNSXMLParserPostObj.parserError);
NSString *responseStringWithEncoded = [[NSString alloc] initWithData: myNSMDataPostFromServer encoding:NSUTF8StringEncoding];
//NSLog(@"Response from Server : %@", responseStringWithEncoded);
NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[responseStringWithEncoded dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
serverResponse.attributedText = attrStr;
NSString *Str =serverResponse.text;
NSLog(@"Server Response =%@",Str);
UIAlertView *alert3 = [[UIAlertView alloc] initWithTitle:@"Success"
message:@"Complaint Added Successfully"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
Para obtener datos del servicio web estoy usando un código como este:
loginStatusZone = [[NSString alloc] initWithBytes: [myNSMDatazoneFromServer mutableBytes] length:[myNSMDatazoneFromServer length] encoding:NSUTF8StringEncoding];
NSLog(@"loginStatus =%@",loginStatusZone);
NSError *parseError = nil;
NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLString:loginStatusZone error:&parseError];
NSLog(@"JSON DICTIONARY = %@",xmlDictionary);
recordResultZone = [xmlDictionary[@"success"] integerValue];
NSLog(@"Success: %ld",(long)recordResultZone);
NSDictionary* Address=[xmlDictionary objectForKey:@"soap:Envelope"];
NSLog(@"Address Dict = %@",Address);
NSDictionary *new =[Address objectForKey:@"soap:Body"];
NSLog(@"NEW DICT =%@",new);
NSDictionary *LoginResponse=[new objectForKey:@"FillZonesNewResponse"];
NSLog(@"Login Response DICT =%@",LoginResponse);
NSDictionary *LoginResult=[LoginResponse objectForKey:@"FillZonesNewResult"];
NSLog(@"Login Result =%@",LoginResult);
if(LoginResult.count>0)
{
NSLog(@"Login Result = %@",LoginResult);
NSLog(@"Login Result Dict =%@",LoginResult);
NSString *teststr =[[NSString alloc] init];
teststr =[LoginResult objectForKey:@"text"];
NSLog(@"Test String Value =%@",teststr);
NSString *string = [LoginResult valueForKey:@"text"];
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
zoneresponsedict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
idzonearray=[[NSMutableArray alloc]init];
idzonearray=[zoneresponsedict valueForKey:@"ZoneId"];
NSLog(@"Result Array =%@",idzonearray);
shortnamezonearray=[[NSMutableArray alloc]init];
shortnamezonearray=[zoneresponsedict valueForKey:@"ZoneName"];
NSLog(@"Result Array =%@",shortnamezonearray);
}
Si agrego un carácter especial, me muestra un error como
Domain=NSXMLParserErrorDomain Code=111 "The operation couldn’t be completed. (NSXMLParserErrorDomain error 111.)"
¿Cómo puedo publicar datos con caracteres especiales?
Estoy agregando algo como esto en idioma tailandés
Pero estoy obteniendo esto:
Lo mismo con el hindi
La salida se está volviendo así
Pero cuando alguien agrega el idioma tailandés usando Android o el sitio web, recibo el texto correcto en tailandés. El único problema es con este código postal.
Deberá escribir & <> de la siguiente manera, como en un archivo html:
& < >
Puede reemplazar su cadena para que le permita enviar caracteres especiales.
Puede usar el método de cadena
stringByReplacingOccurrencesOfString
NSString *RaisedBy="Your Special character string";
RaisedBy = [RaisedBy stringByReplacingOccurrencesOfString:@"&" withString:@"&"];
RaisedBy = [RaisedBy stringByReplacingOccurrencesOfString:@"<" withString:@"<"];
RaisedBy = [RaisedBy stringByReplacingOccurrencesOfString:@">" withString:@">"];
RaisedBy = [RaisedBy stringByReplacingOccurrencesOfString:@"''" withString:@"'"];
RaisedBy = [RaisedBy stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
Este código también admitirá el idioma tailandés.