【问题标题】:Remove encoding from NSString? [duplicate]从 NSString 中删除编码? [复制]
【发布时间】:2013-03-25 23:20:29
【问题描述】:

我正在开发一个 iOS 应用程序。我从 web 服务接收 json 并将其解析为不同的 NSString。问题是有时字符串包含尚未解码的特殊字符。

例如,我可以得到:Test One"Two 作为 NSString。

如何从 NSString 中删除像这样的特殊字符?

【问题讨论】:

标签: ios objective-c


【解决方案1】:

我不久前编写了这个类来帮助从 NSString 中剥离 HTML。

NSString+StripHTML

NSString+StripHTML.h

#import <Foundation/Foundation.h>

@interface NSString (StripHTML)

-(NSString *)stringByStrippingHTML;

@end

NSString+StripHTML.m

#import "NSString+StripHTML.h"

@implementation NSString (StripHTML)

-(NSString *) stringByStrippingHTML {
    NSRange r;
    NSString *s = [self copy];
    while ((r = [s rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound)
        s = [s stringByReplacingCharactersInRange:r withString:@""];
    return s;
}

@结束

希望这会有所帮助。

【讨论】:

  • 这不是我想要的。该字符串实际上不是 HTML 格式。只是里面有随机码。我也不想删除它,只是正确地表示它
【解决方案2】:

我认为您只需要一个简单的正则表达式替换:

这就是 Neevik 在Use regular expression to find/replace substring in NSString 中展示的内容

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"&[^;]*;" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@""];
NSLog(@"%@", modifiedString);

这应该会删除您的特殊字符。

【讨论】:

  • 来自他对另一个答案的评论:“我不想删除它,只是正确地表示它。”此外,您的正则表达式太饿了:@“Roger & Ebert 认为“The Shining!”很棒。”。我可能会建议 @"&amp;#?[a-z0-9]+;" 用于模式和不区分大小写的搜索。这让你更接近,同时仍然非常简单。
猜你喜欢
  • 2011-05-13
  • 1970-01-01
  • 2011-05-03
  • 2012-12-29
  • 2013-08-22
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多