首页 > 解决方案 > 如何在 Windows 路径中使用非 ASCII 字符加载 hunspell 字典?

问题描述

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

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 文档中的注释记录的一致目录分隔符,并使用.toUtf8()将其转换为 UTF-8 编码。

然而在 Windows 10 Pro 上运行代码失败:

从具有非 ASCII 字符的路径加载 Hunspell 失败

怎么修?

使用 Qt5,MinGW 7.3.0。

我也做了适当的研究,据我所知,LibreOffice 做了同样的事情,而且似乎对他们有用:sspellimp.cxxlingutil.hxxlingutil.cxx

标签: winapinon-ascii-charactershunspell

解决方案


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

(感谢Windows 目录永远不会包含临时文件的非 ASCII 字符?


推荐阅读