如何在Windows路径中使用非ASCII字符加载hunspell词典?
在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上运行代码失败:
如何解决?
使用Qt5,MinGW 7.3.0。
我也进行了适当的研究,据我所知,LibreOffice会做同样的事情,并且似乎对他们有用:sspellimp.cxx,lingutil.hxx和lingutil.cxx。 / p>
答案 0 :(得分:0)
您可以使用GetShortPathNameW获得Hunspell将理解的纯ASCII路径。有关示例,请参见QTIFW-175。
(感谢Windows directory that will never contain non-ASCII characters for temp file?)