问题:在从数据库中取出数据用来建立Lucene索引时,遇到形如“\u041A\u0430\u0441\u0442\u0438\u043B\u0438\u044F - \u041B\u0430 \u041C\u0430\u043D\u0447\u0430”的字符串,length为94,而其实是字符串“Кастилия - Ла Манча”的Unicode形式(length为19)。若直接存入Lucene,而在查询时候用String str=“\u041A\u0430\u0441\u0442\u0438\u043B\u0438\u044F - \u041B\u0430 \u041C\u0430\u043D\u0447\u0430”查找时,找不到相应的结果。
解决方案:在建立索引时,先将unicode转换为它所表达的字符的形式(即将字符串“\u041A”转换为“К“),再存入索引中,转换代码如下:
/**
*
* @author Qingxia Liu 2013-8-7 上午10:54:03
*
*/
public class StringConverter {
public static String UnicodeToString(String str) {
Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");
Matcher matcher = pattern.matcher(str);
char ch;
while (matcher.find()) {
ch = (char) Integer.parseInt(matcher.group(2), 16);
str = str.replace(matcher.group(1), ch + "");
}
return str;
}
}