Как загрузить словарь hunspell в пути Windows с не-ASCII символами? - PullRequest
0 голосов
/ 11 июля 2019

Как загрузить словарь hunspell в пути 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 , и преобразуется в кодировку UTF-8 с помощью .toUtf8 () .

Однако запуск кода в Windows 10 Pro завершается неудачно:

Hunspell loading from path with non-ASCII characters fails

Как исправить?

Используя Qt5, MinGW 7.3.0.

Я также провел надлежащее исследование и, насколько я вижу, LibreOffice делает то же самое, и, похоже, работает для них: sspellimp.cxx lingutil.hxx и lingutil.cxx .

1 Ответ

0 голосов
/ 20 июля 2019

Вы можете использовать GetShortPathNameW , чтобы получить путь чистого ASCII, который поймет Hunspell. См. QTIFW-175 для примера.

(спасибо Каталог Windows, который никогда не будет содержать символы не ASCII для временного файла? )

...