2011-11-13 8 views
0

Im essayant de convertir certains caractères spéciaux comme ä, ö, ü, α, μ, α, ο, ι, et d'autres d'une page Web. Quand je télécharge la page avec le ASIHTTPRequest je reçois quelques codes au lieu du caractère lui-même. Exemples:
ä = \u00E4
μ = \u03BC
α = \u03B1NSString caractères spéciaux codant

Cela se produit également si j'utilise [NSString stringWithContentsOfURL:aNSURL encoding:NSASCIIStringEncoding error:nil]; J'ai essayé différents encodages disponibles, mais aucun d'entre eux travaillent pour l'exemple ci-dessus. Par exemple: Avec le NSUnicodeStringEncoding je reçois des caractères étranges comme 'chinois' et avec NSASCIIStringEncoding je reçois ces chiffres & lettres.

La chose étrange est, si je regarde dans le code source, dans un navigateur Web comme Safari, de la page Web, il est très bien, avec l'entité de caractères HTML normal comme: ä = ä

Y at-il moyen de convertir ces lettres codées?


Merci

EDIT
Désolé, que j'oublié de mentionner le code source d'un navigateur ci-dessus.

Je viens de remarquer sur ce site: link que l'entité HTML hex est très similaire à ce que j'ai avec ce code. Exemples:
ä = ä
μ = μ
α = α

Comme vous pouvez le voir peut-être, ils sont très similaires. Juste en minuscules et les 0 sont remplacés par un x, et au début ajouter &#, à la fin un ;. Je vais juste devoir écrire un petit code pour convertir les lettres & en entités hexadécimales, ce qui ne va pas être un gros problème. Ensuite, il suffit d'utiliser un convertisseur d'entité HTML et fait.

Quoi qu'il en soit, merci beaucoup pour me aider à nouveau

Sean

+2

Voulez-vous dire que la chaîne contient les six caractères '\', 'u', '0', '0', 'E' et '4', et vous voulez juste contenir le caractère 'ä'? Aussi, avez-vous essayé 'NSUTF8StringEncoding'? –

+0

@rob Oui, la chaîne contient six caractères et par conséquent je viens de gagner pour avoir ce seul caractère. Le 'NSUTF8StringEncoding' n'a fait aucune différence – Silicone

+1

Vérifiez ma réponse ici: http://stackoverflow.com/questions/7860867/converting-escaped-utf8-characters-back-to-their-original-form-in-ios -objective/7861345 # 7861345 –

Répondre

1

Vous pouvez utiliser le trouvé à ce link. Il utilise une méthode intégrée de l'analyseur CFXML. Il décrit le code ci-dessous

@interface MREntitiesConverter : NSObject { 
NSMutableString* resultString; 
} 
@property (nonatomic, retain) NSMutableString* resultString; 
- (NSString)convertEntiesInString:(NSString)s; 
@end 

@implementation MREntitiesConverter 
@synthesize resultString; 
- (id)init 
{ 
if([super init]) { 
resultString = [[NSMutableString alloc] init]; 
} 
return self; 
} 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)s { 
[self.resultString appendString:s]; 
} 
- (NSString)convertEntiesInString:(NSString)s { 
if(s == nil) { 
NSLog(@"ERROR : Parameter string is nil"); 
} 
NSString* xmlStr = [NSString stringWithFormat:@"<d>%@</d>", s]; 
NSData *data = [xmlStr dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 
NSXMLParser* xmlParse = [[NSXMLParser alloc] initWithData:data]; 
[xmlParse setDelegate:self]; 
[xmlParse parse]; 
NSString* returnStr = [[NSString alloc] initWithFormat:@"%@",resultString]; 
return returnStr; 
} 
- (void)dealloc { 
[resultString release]; 
[super dealloc]; 
} 
@end 

vous pouvez également utiliser NSString* sI = (NSString*)CFXMLCreateStringByUnescapingEntities(NULL, (CFStringRef)s, NULL); qui est disponible en fonction du système d'exploitation que vous construisez.

+1

Merci pour votre réponse – Silicone

1

Aussi, vous pouvez vérifier cela et de l'utiliser: https://github.com/mwaterfall/MWFeedParser/blob/master/Classes/NSString+HTML.m

- (NSString *)stringByConvertingHTMLToPlainText; 
- (NSString *)stringByDecodingHTMLEntities; 
- (NSString *)stringByEncodingHTMLEntities; 
- (NSString *)stringWithNewLinesAsBRs; 
- (NSString *)stringByRemovingNewLinesAndWhitespace; 
- (NSString *)stringByLinkifyingURLs; 

Vérifiez en utilisant cette méthode:

- (NSString *)stringByDecodingHTMLEntities;