【问题标题】:Convert NSString with NSScanner使用 NSScanner 转换 NSString
【发布时间】:2014-04-03 14:51:04
【问题描述】:

我有一个格式如下的字符串:Oy\U00e9\U00e9 Oy\U00e9 所以,我在某个论坛上找到了一些东西并试图对其进行调整。这是我使用的:

// To keep whiteSpaces safe
string = [string stringByReplacingOccurrencesOfString:@" " withString:@"@@**@@"];
NSMutableString* clean_string = [NSMutableString string];
NSScanner* scanner = [NSScanner scannerWithString:string];
NSString* buf = nil;

while (![scanner isAtEnd] ) {
    //Plus de caractères à scanner
    if (![scanner scanUpToString: @"\\u" intoString: &buf] ){
        break;
    }
    NSLog(@"%@", buf);
    [clean_string appendString: buf];

    //Fin du scan
    if ([scanner isAtEnd] ){
        break;
    }

    [scanner setScanLocation: [scanner scanLocation] + 3];//skip the '\\u'
    unsigned c = 0;

    if ([scanner scanHexInt: &c]){
        [clean_string appendFormat: @"%c", c];
    }else{
        [clean_string appendString: @"\\u"];//nm
    }
}



self.cleanStringWithSpaces= [clean_string stringByReplacingOccurrencesOfString:@"@@**@@" withString:@" "];

return self.cleanStringWithSpaces;

问题是当我有一个后面有 2 个 \u00e9 的字符串时,该字符串被剪切了。

示例

Oy\U00e9\U00e9 Oy\U00e9    Give ====> Oyé

而不是:Oyéé Oyé

也许我错过了什么......希望你能帮助我!

祝你有美好的一天!

【问题讨论】:

  • 您是否确定您的字符串包含\Uxxxx,而这不仅仅是您在日志/等中看到它的方式吗?
  • 是的,我是这样理解的。我确定,但是您知道一种无需日志即可知道它的方法吗?
  • @iPatel,并不是我真正想要的。
  • 当您的输入字符串为大写“U”时,为什么您的代码会扫描小写“u”?

标签: ios objective-c nsstring nsscanner


【解决方案1】:

@JoshCaswell 回答了我的问题,让我度过了愉快的一天。

我使用了我在这里找到的东西:Converting escaped UTF8 characters back to their original form

[NSString stringWithCString:[name2escaped cStringUsingEncoding:NSUTF8StringEncoding]
        encoding:NSNonLossyASCIIStringEncoding];

【讨论】:

    【解决方案2】:

    我认为问题出在以下行:

    [scanner setScanLocation: [scanner scanLocation] + 3];//skip the '\\u'
    

    更改扫描仪位置时,您计算的是转义字符。 @"\\u" 实际上只有\u,所以你应该使用:

    [scanner setScanLocation: [scanner scanLocation] + 2];//skip the '\\u'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      相关资源
      最近更新 更多