objective-c - NSString 特殊字符编码

标签 objective-c cocoa nsstring asihttprequest

我正在尝试转换一些特殊字符,例如 ä , ö , ü , α , μ , α , ο , ι ,以及网页上的其他内容。当我使用 ASIHTTPRequest 下载页面时,我得到一些代码而不是字符本身。示例:
ä = \u00E4
μ = \u03BC
α = \u03B1

如果我使用 [NSString stringWithContentsOfURL:aNSURL encoding:NSASCIIStringEncoding error:nil]; 也会发生这种情况 我尝试了不同的可用编码,但它们都不适用于上面的示例。例如:使用 NSUnicodeStringEncoding我得到一些奇怪的像“中文”字符和 NSASCIIStringEncoding我得到这些数字和字母。

奇怪的是,如果我在像 safari 这样的网络浏览器中查看网页的源代码,一切都很好,正常的 HTML 字符实体如:ä = ä

有什么办法可以将这些编码字母转换回来吗?


谢谢

编辑
抱歉,我忘了提到上面浏览器的源代码。

我刚刚注意到这个网站:link十六进制 HTML 实体与我使用此代码得到的非常相似。示例:
ä = ä
μ = μ
α = α

正如您所看到的,它们非常相似。只是小写和 0被替换为 x ,并在开头添加 &# ,到最后; 。 我只需要编写一些小代码来将数字和字母转换为十六进制实体,这不会是一个大问题。然后只需使用 HTML 实体转换器即可完成。

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

肖恩

最佳答案

您可以使用在此处找到的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);,该方法的可用性取决于您要构建的操作系统。

关于objective-c - NSString 特殊字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8114162/

相关文章:

iphone - 频繁asihttprequest runrequests crash

cocoa - 如何阻止直到 Cocoa 中发布特定通知?

iphone - Cocoa 中用于在 unicode 字符和虚拟键码之间转换的内置函数?

iphone - 将查询字符串解析为结构化 NSDictionary

objective-c - 在 nsstring 中查找和替换所有内容

objective-c - 应用程序中的多个导航 Controller

ios - 滚动 UITableView 时 UITableViewCell 位置发生变化

ios - UITableView 输入域被覆盖

cocoa - Cocoa 中 .Net 数据中继器的等效项

ios - 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因 : '*** setObjectForKey: object cannot be nil (key: index)'