1

我尝试了 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 with dot below”作为问号返回,而“a with macron”和“i with macron”分别作为 a 和 i 返回。

据我所知,本机 Hunspell DLL 完全启用了 unicode。因此,我认为 NHunspell C# 层破坏了一些东西。源代码如下所示:

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。尽管如此,它显然不起作用。有没有人有建议(双关语)?

谢谢,托马斯

4

0 回答 0