NSString特殊字符编码

时间:2011-11-13 19:44:40

标签: objective-c cocoa nsstring asihttprequest

我正在尝试转换某些特殊字符,例如äöüαμα,{{1来自网页的},ο和其他人。当我使用 ASIHTTPRequest 下载页面时,我得到一些代码而不是字符本身。例子:
   ι
   ä = \u00E4
   μ = \u03BC

如果我使用α = \u03B1,也会发生这种情况 我尝试了不同的编码,但它们都不适用于上面的例子。例如:对于[NSString stringWithContentsOfURL:aNSURL encoding:NSASCIIStringEncoding error:nil];我会遇到一些奇怪的问题,例如“中国人”。字符和NSUnicodeStringEncoding我得到这些数字和字母。

奇怪的是,如果我查看网页中的源代码在网页浏览器中,例如safari ,它就可以了,使用普通的HTML字符实体,例如: NSASCIIStringEncoding

有没有办法将这些编码后的字母转换回来?


感谢

编辑
对不起,我忘了提到上面浏览器的源代码。

我刚注意到这个网站:link十六进制HTML实体与我的tis代码非常相似。例子:
ä = ä
ä = ä
μ = μ

你可能会看到,它们非常相似。只需使用小写字母,α = α将被0替换,并在开头添加x,结尾为&#。 我只需编写一些小代码将数字和字母转换为十六进制实体,这不会是一个大问题。然后只需使用HTML实体转换器并完成。

无论如何,非常感谢再次帮助我

肖恩

3 个答案:

答案 0 :(得分:1)

您可以使用此link找到的内容。它使用CFXML解析器中的内置方法。它描述了下面的代码

@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

或者,您可以根据您正在构建的操作系统使用NSString* sI = (NSString*)CFXMLCreateStringByUnescapingEntities(NULL, (CFStringRef)s, NULL);

答案 1 :(得分:1)

您也可以查看并使用它:https://github.com/mwaterfall/MWFeedParser/blob/master/Classes/NSString+HTML.m

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

使用此方法检查:

- (NSString *)stringByDecodingHTMLEntities;

答案 2 :(得分:0)

再次使用Rob Mayoff代码尝试后,它就可以了!这是他回答的链接:
Converting escaped UTF8 characters back to their original form