如何在Windows路径中使用非ASCII字符加载hunspell词典?

时间:2019-07-11 11:55:12

标签: winapi non-ascii-characters hunspell

如何在Windows路径中使用非ASCII字符加载hunspell词典?

Hunspell manual建议:

  

在WIN32中          环境中,请使用以长路径前缀\?\开头的UTF-8编码路径来处理          与系统无关的字符编码和非常长的路径名。

所以我有执行以下操作的代码:

QString spell_aff = QStringLiteral(R"(\\?\%1%2.aff)").arg(path, newDict);
QString spell_dic = QStringLiteral(R"(\\?\%1%2.dic)").arg(path, newDict);
// while normally not a an issue, you can't mix forward and back slashes with the prefix
spell_dic = spell_aff.replace(QChar('/'), QStringLiteral("\\"));
spell_dic = spell_dic.replace(QChar('/'), QStringLiteral("\\"));

qDebug() << "right before Hunspell_create";
mpHunspell_system = Hunspell_create(spell_aff.toUtf8().constData(), spell_dic.toUtf8().constData());
qDebug() << "right after Hunspell_create";

此前缀\\?\到路径,使用microsoft documentation中注释说明的一致的目录分隔符,并将其转换为使用.toUtf8()的UTF-8编码。

但是在Windows 10 Pro上运行代码失败:

Hunspell loading from path with non-ASCII characters fails

如何解决?

使用Qt5,MinGW 7.3.0。

我也进行了适当的研究,据我所知,LibreOffice会做同样的事情,并且似乎对他们有用:sspellimp.cxxlingutil.hxxlingutil.cxx。 / p>

1 个答案:

答案 0 :(得分:0)

您可以使用GetShortPathNameW获得Hunspell将理解的纯ASCII路径。有关示例,请参见QTIFW-175

(感谢Windows directory that will never contain non-ASCII characters for temp file?