我已将Windows搜索服务配置为索引测试文件夹c:\ temp \ test。文件amsi.txt以ansi(代码页1251)格式保存,内容中包含单词“substring”和“Россия”。当我搜索单词“substring”时 - 文件显示在结果中。当我搜索单词“россия”时 - 如果搜索结果没有显示。
PDF文件的相同行为 - 文件test.pdf包含相同的单词。仅当我搜索“substring”字时,搜索结果才包含此文件。
我已将搜索服务配置为始终搜索内容。我已经为.pdf和.txt扩展名的索引文件内容配置服务。之后我重新编制了索引文件夹。安装了最新版本的pdf IFilter for my x64系统(来自Adobe)。
此外,我已经实现了应用程序来重现情况并使用指定为1049的LCID执行相关查询,并尝试将查询编码为ansi(代码页1251)。结果相同 - 在pdf和ansi测试文件中找不到俄语单词。
如何使用Windows搜索服务在ansi或pdf文档中搜索非英语单词?
答案 0 :(得分:0)
已解决文本文件,如下所示。有谁知道如何处理pdf?
我已经实现了以下丑陋的转换,并将字符串转换为搜索丑陋的Windows搜索服务(c#代码):
public static class Helper
{
public static string UnicodeToUglycode(string unicodeString, string lang)
{
var ansiCodePage = GetCodepage(lang);
var unicode = Encoding.Unicode;
var ansi = Encoding.GetEncoding(ansiCodePage);
var bytesUnicode = unicode.GetBytes(unicodeString);
var bytesansi = Encoding.Convert(unicode, ansi, bytesUnicode);
// try udly recoding lie WSS
var uglycode = AnsiToUglycode(bytesansi);
return uglycode;
}
/// <summary>
/// This is done as ugly Windows Search Service do
/// </summary>
/// <param name="ansiBytes">Correct ansi values</param>
/// <returns>ugly converted to unicode string</returns>
public static string AnsiToUglycode(byte[] ansiBytes)
{
var builder = new StringBuilder();
for (int i = 0; i < ansiBytes.Length; i++)
{
var ch = ansiBytes[i].ToString("X2");
ch = ch.Insert(0, "00");
int value = Convert.ToInt32(ch, 16);
builder.Append(Char.ConvertFromUtf32(value));
}
var ugly = builder.ToString();
return ugly;
}
public static int GetLcid(string lang)
{
var cultureInfo = CultureInfo.GetCultureInfo(lang);
return cultureInfo.TextInfo.LCID;
}
public static int GetCodepage(string lang)
{
var cultureInfo = CultureInfo.GetCultureInfo(lang);
return cultureInfo.TextInfo.ANSICodePage;
}
}