[英]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.