我正在尝试转换某些特殊字符,例如ä
,ö
,ü
,α
,μ
,α
,{{1来自网页的},ο
和其他人。当我使用 ASIHTTPRequest 下载页面时,我得到一些代码而不是字符本身。例子:
ι
ä = \u00E4
μ = \u03BC
如果我使用α = \u03B1
,也会发生这种情况
我尝试了不同的编码,但它们都不适用于上面的例子。例如:对于[NSString stringWithContentsOfURL:aNSURL encoding:NSASCIIStringEncoding error:nil];
我会遇到一些奇怪的问题,例如“中国人”。字符和NSUnicodeStringEncoding
我得到这些数字和字母。
奇怪的是,如果我查看网页中的源代码在网页浏览器中,例如safari ,它就可以了,使用普通的HTML字符实体,例如: NSASCIIStringEncoding
有没有办法将这些编码后的字母转换回来?
感谢
编辑
对不起,我忘了提到上面浏览器的源代码。
我刚注意到这个网站:link十六进制HTML实体与我的tis代码非常相似。例子:
ä = ä
ä = ä
μ = μ
你可能会看到,它们非常相似。只需使用小写字母,α = α
将被0
替换,并在开头添加x
,结尾为&#
。
我只需编写一些小代码将数字和字母转换为十六进制实体,这不会是一个大问题。然后只需使用HTML实体转换器并完成。
无论如何,非常感谢再次帮助我
肖恩
答案 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