【问题标题】:NSString special characters encodingNSString 特殊字符编码
【发布时间】:2011-12-28 04:30:34
【问题描述】:

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

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

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

有没有办法把这些编码的字母转回来?


谢谢

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

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

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

不管怎样,非常感谢你再次帮助我

肖恩

【问题讨论】:

  • 你是说字符串包含'\'、'u'、'0'、'0'、'E'和'4'这六个字符,而你只想包含一个字符'ä'?另外,你试过NSUTF8StringEncoding吗?
  • @rob 是的,该字符串包含六个字符,结果我刚刚赢得了那个单个字符。 NSUTF8StringEncoding 没有任何区别
  • 在这里查看我的答案:stackoverflow.com/questions/7860867/…

标签: objective-c cocoa nsstring asihttprequest


【解决方案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);,这取决于您要构建的操作系统。

【讨论】:

    【解决方案2】:

    您也可以查看并使用它: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;
    

    【讨论】:

      【解决方案3】:

      再次尝试使用Rob Mayoffs 代码后,它成功了!这是他的答案的链接:
      Converting escaped UTF8 characters back to their original form

      【讨论】:

        猜你喜欢
        • 2011-11-26
        • 1970-01-01
        • 2012-05-14
        • 2016-10-19
        • 1970-01-01
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多