編碼

2011-11-13 36 views
0

我試着去一些特殊字符轉換像äöüαμαοι,和其他人從網頁的NSString特殊字符。當我用ASIHTTPRequest下載頁面時,我得到了一些代碼而不是字符本身。例子:
ä = \u00E4
μ = \u03BC
α = \u03B1編碼

如果我使用[NSString stringWithContentsOfURL:aNSURL encoding:NSASCIIStringEncoding error:nil]; 我曾嘗試不同的編碼可用,但他們都不在上面的例子中工作,也會出現這種情況。例如:與NSUnicodeStringEncoding我得到一些奇怪的像'中國'字符和NSASCIIStringEncoding我得到這些數字&字母。

奇怪的是,如果我看在源代碼中,在Web瀏覽器如Safari,網頁的,這一切都很好,與像普通HTML字符實體:ä = ä

是否有任何如何將這些編碼的字母轉換回來?


由於

EDIT
對不起,我忘了提及上述瀏覽器的源代碼。

我剛剛在這個網站上發現:link這個十六進制HTML實體與我用tis代碼得到的非常相似。例子:
ä = ä
μ = μ
α = α

正如你可以看到,也許,他們是非常相似的。將小寫字母和0替換爲一個x,並在開頭加&#,結束爲a ;。 我只需要編寫一些小代碼將數字&字母轉換爲十六進制實體,這不會是一個大問題。然後只需要使用HTML實體轉換器並完成。

無論如何,非常感謝再次

幫助我肖恩

+2

你是說這個字符串包含六個字符'\','u','0','0','E'和'4',並且你想只包含一個字符'ä'?另外,你是否嘗試過'NSUTF8StringEncoding'? –

+0

@rob是的,這個字符串包含六個字符,結果我贏得了這個單個字符。 'NSUTF8StringEncoding'沒有任何區別 – Silicone

+1

查看我的答案在這裏:http://stackoverflow.com/questions/7860867/converting-escaped-utf8-characters-back-to-their-original-form-in-ios - 目標/ 7861345#7861345 –

回答

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);它可根據您正在爲它的操作系統。使用這種方法https://github.com/mwaterfall/MWFeedParser/blob/master/Classes/NSString+HTML.m

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

檢查:

+1

感謝您的維修人員 – Silicone

1

您也可以看看這個,並用它

- (NSString *)stringByDecodingHTMLEntities;