我按照以下方式尝试了NHunspell NuGet包:
var hunspell = new NHunspell.Hunspell(@"AffPath", @"DicPath");
hunspell.Add("Upadeṣasāhasrī");
var suggestions = hunspell.Suggest("Upadesasahasri");
Console.WriteLine(suggestions.First());
不幸的是,这个建议是“Upade?asahasri”。 “带有点下面的s”作为问号返回,而“a with macron”和“i with macron”分别作为a和i返回。
据我所知,本机Hunspell DLL已完全启用unicode。因此,我认为NHunspell C#层会破坏某些东西。 source code看起来像这样:
internal delegate IntPtr HunspellSuggestDelegate(IntPtr handle, [MarshalAs(UnmanagedType.LPWStr)] string word);
IntPtr strings = MarshalHunspellDll.HunspellSuggest(this.unmanagedHandle, word);
int stringCount = 0;
IntPtr currentString = Marshal.ReadIntPtr(strings, stringCount * IntPtr.Size);
while (currentString != IntPtr.Zero)
{
++stringCount;
result.Add(Marshal.PtrToStringUni(currentString));
currentString = Marshal.ReadIntPtr(strings, stringCount * IntPtr.Size);
}
我根本不是编组专家,但UnmanagedType.LPWStr和Marshal.PtrToStringUni似乎考虑了Unicode。然而,它显然不起作用。有没有人有建议(双关语)?
谢谢,托马斯