将某些字符转换为转义的unicode版本



我有一个NSString,其中包含可能不需要的字符,我必须将其转换为转义的unicode版本。更具体地说,我需要通过UIWebView的脚本评估方法将JSON对象(序列化为字符串)传递给它,并且一些字符往往会引发JS异常。

所以我想对JSLint提到的所有不安全的字符进行编码,它们是:

u0000-u001f
u007f-u009f
u00ad
u0600-u0604
u070f
u17b4
u17b5
u200c-u200f
u2028-u202f
u2060-u206f
ufeff
ufff0-uffff

并用逃逸的等价物替换它们。

最好的方法是什么?

UPDATE:不知何故,u2028(行分隔符字符)潜入JSON

好吧,这不是我想要的解决方案,但修剪也是一个合适的选项

  // Remove unsafe JSON characters
  //
  // http://www.jslint.com/lint.html#unsafe
  //
  if (jsonStr.length > 0) {
    NSMutableCharacterSet *unsafeSet = [NSMutableCharacterSet new];
    void (^addUnsafe)(NSInteger, NSInteger) = ^(NSInteger from, NSInteger to) {
      if (to > from) {
        [unsafeSet addCharactersInRange:NSMakeRange(from, (to - from) + 1)];
      } else {
        [unsafeSet addCharactersInRange:NSMakeRange(from, 1)];
      }          
    };
    addUnsafe(0x0000, 0x001f);
    addUnsafe(0x007f, 0x009f);
    addUnsafe(0x00ad, 0);
    addUnsafe(0x0600, 0x0604);
    addUnsafe(0x070f, 0);
    addUnsafe(0x17b4, 0);
    addUnsafe(0x17b5, 0);
    addUnsafe(0x200c, 0x200f);
    addUnsafe(0x2028, 0x202f);
    addUnsafe(0x2060, 0x206f);
    addUnsafe(0xfeff, 0);
    addUnsafe(0xfff0, 0xffff);
    jsonStr = [[jsonStr componentsSeparatedByCharactersInSet:unsafeSet] componentsJoinedByString:@""];
  }

最新更新