繁体   English   中英

使用NSScanner转换NSString

[英]Convert NSString with NSScanner

我有一个这样格式化的字符串: 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é

也许我错过了一些事情...希望您能帮助我!

祝你今天愉快 !

@JoshCaswell通过回答我的问题来度过了美好的一天。

我使用了在这里找到的东西: 将转义的UTF8字符转换回其原始格式

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

我认为问题出在线路上:

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

更改扫描仪位置时,您正在计算转义符。 @"\\\\u\u0026quot;实际上只是\\u\u003c/code> ,因此您应该使用:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM