Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: Torvald от Июль 04, 2017, 00:00



Название: Передача интернациональной строки в стороннюю либу [Решено]
Отправлено: Torvald от Июль 04, 2017, 00:00
Использую FreeImage для открытия\сохранения изображений (потому, что он умеет EXIF, а Qt - нет).
Соответственно для этого библиотеке нужно передать название файла. Названия могут быть такими:

Photo 203.png
Безымянный.png
肖像画.jpg

Эти файлы я считываю через

QString path = QFileDialog::getOpenFileName(...)

Полученную строку пытаюсь передать в либу, но все тщетно:
Если я передаю строку как path.toUtf8().data(), то все работает, только с латинскими названиями.
Если передаю как path.toLocal8Bit.data(), то либа работает только с латинскими названиями и названиями в кодировке текущей локали (в данном случае кириллицей).

Подскажите, пожалуйста, как правильно передавать строки в сторонние либы? Чтобы любые символы читались. Исходники в юникоде, внутри Qt все отображается как надо - проблемы только с либой.

Еще там есть возможность открытия\сохранения по строке типа const wchar_t * (utf16), но как я не пытался конвертировать QString, какую бы я строку не пихал в либо - не работает.

Либа: http://freeimage.sourceforge.net/


Название: Re: Передача интернациональной строки в стороннюю либу
Отправлено: ssoft от Июль 04, 2017, 07:51
1. Скорее всего, необходимо преобразовывать текст с помощью QTextCodec::codecForLocale(), иероглифы здесь вряд ли прочитаются.
2. Если есть методы utf16, то должно работать QString::utf16 ().


Название: Re: Передача интернациональной строки в стороннюю либу
Отправлено: Torvald от Июль 04, 2017, 14:47
Помогло это: https://stackoverflow.com/a/23894895
Как выяснилось в библиотеке используется fopen который на винде работает только для текущей локали. У него есть расширенная версия _wfopen, который работает в юникоде. К счастью, в либе есть вариант с _wfopen.
Решение выглядит так:
path.toStdWString().c_str()


Название: Re: Передача интернациональной строки в стороннюю либу [Решено]
Отправлено: Igors от Июль 05, 2017, 05:02
Полезная инфа, не знал, спасибо