winapi - 如何在 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 上运行代码失败:
怎么修?
使用 Qt5,MinGW 7.3.0。
我也做了适当的研究,据我所知,LibreOffice 做了同样的事情,而且似乎对他们有用:sspellimp.cxx、lingutil.hxx和lingutil.cxx。
解决方案
您可以使用GetShortPathNameW获取 Hunspell 可以理解的纯 ASCII 路径。有关示例,请参见QTIFW-175。
推荐阅读
- express - 具有单独会话的共享 API
- r-markdown - 将officedown页面上的导入图像最大化为Word(docx)
- java - 在 RecyclerView 中添加静态默认项
- c# - 如何在 .Net 的存储库模式中使用流畅的验证?
- spring - SC_UNAUTHORIZED 在 Spring Boot 中返回 403
- sql - 如何在 SQL (Oracle) 中执行跨列唯一约束
- python - 无法使用 Selenium 和 Python 在 #shadow-root (open) 中找到登录元素
- r - 基于整数向量对字符向量进行排序
- oauth-2.0 - 使用 Oauth2.0 的 Google 日历计划仅适用于 @gmail.com 用户。对于非 gmail 用户,不发送邀请
- c# - 我怎样才能只下载我的 pdf 文件而不是完整的文件路径和文件夹