NSRegularExpression匹配不起作用

时间:2012-05-02 06:45:05

标签: regex nsstring nsregularexpression nsstringencoding

我正在尝试在NSString中替换一些转义的unicode。我没有幸运的CFString函数,所以我想我会尝试正则表达式。

这是正则表达式

NSRegularExpression *regexUnicode2 = [NSRegularExpression regularExpressionWithPattern:@"(\\u([0-9A-Fa-f]){4}){2}" options:0 error:&error];

然后我尝试使用此

获取匹配
NSArray *twoEscapeArray = [regexUnicode2 matchesInString:selfCopy options:0 range:NSMakeRange(0, self.length)];

selfCopy是输入字符串的可变副本。这是一个字符串:

  

muestran al p \ u00clic \ u00bablico las encuadernaciones de las colecciones   reales adem \ u00c3 \ u00a1s de otros objetos hist \ u00c3 \ u00b3ricos en   他们是一个不错的选择。

La muestra,   在世界各地的一个nivel mundial como uno de los conjuntos ligatorios   hist \ u00c3 \ u00b3ricos m \ u00c3 \ u00a1s importantes,se completa con   obras de arte como armas,alfombras y relojes。 Estos son objetos que   ayudan a entender la encuadernaci \ u00c3 \ u00b3n como elemento   de la cultura de corte。

Los fondos de la Real   Biblioteca,del Real Monasterio de San Lorenzo de El Escorial,del   Monasterio de Santa Mar \ u00c3 \ u00ada la Real de las Huelgas de Burgos,   del Monasterio de las

如果没有正确的转换,当我将它们放入UIWebView时,这些转义的unicode对被视为单个字符(每对产生两个字符)。

这是原始JSON数据的编码方式,我没有任何运气可以让它正确转换为拉丁字符。

无论如何,问题是匹配尝试后数组twoEscapeArray为零。我不确定为什么。

1 个答案:

答案 0 :(得分:0)

您的意思是\u00c3\u00ba正在转换为ú?这看起来对我来说是正确的行为。真正的问题是那些Unicode转义是如何进入的。看起来文本在某些时候被错误地解码了(可能是在创建NSString的时候?),应该是字母ú的两字节UTF-8编码(U + 00FA,拉丁文小写字母) U With Acute)被解码为两个字符。

尝试返回创建NSString的位置,这次指定UTF-8作为编码。