Russian Qt Forum

Qt => Общие вопросы => Тема начата: voltron от Август 15, 2012, 20:54



Название: Узнать системную кодировку
Отправлено: voltron от Август 15, 2012, 20:54
Потребовалось получать название кодировки, которая используется в QTextCodec. Но когда делаю так
Код:
mCodec = QTextCodec::codecForLocale();
QByteArray encodingName = mCodec->name();

то в encodingName получаю неинформативное "System", вместо желаемого "UTF-8" или, например, "ISO-8859-7". Есть какой-то способ узнать какая именно кодировка скрывается под этим "System"? В aliases() смотрел, там пусто.

Qt 4.7.0/4.7.1


Название: Re: Узнать системную кодировку
Отправлено: wester от Август 17, 2012, 12:44
Система ведь Windows ?
если да, то некоторые обсуждения
https://bugreports.qt-project.org/browse/QTBUG-18274?attachmentOrder=desc
http://www.qtcentre.org/archive/index.php/t-2071.html
ну и решение для windows http://stackoverflow.com/questions/10702103/how-to-get-windows-xp-gui-default-code-page


Название: Re: Узнать системную кодировку
Отправлено: voltron от Август 17, 2012, 13:51
Системы разные: Windows, Linux, Mac.

Вторую ссылку уже видел. Увы, решения там нет. Да и проблема не в том, что данные пишутся не так, с этим как раз все в порядке. Нужно именно узнать что за кодировка используется в системе. Например, в Linux у меня системная UTF-8, в винде — CP1251. Но и там, и там QTextCodec::codecForLocale()->name() возвращает "System".


Название: Re: Узнать системную кодировку
Отправлено: Serr500 от Август 17, 2012, 14:06
Так в документации написано даже, что он вернёт "System":
Цитировать
On Windows, the codec will be based on a system locale. On Unix systems, starting with Qt 4.2, the codec will be using the iconv library. Note that in both cases the codec's name will be "System".
http://qt-project.org/doc/qt-4.8/qtextcodec.html#codecForLocale (http://qt-project.org/doc/qt-4.8/qtextcodec.html#codecForLocale)
Видимо, придётся использовать родные для каждой системы функции чтобы получить правильное значение кодировки.


Название: Re: Узнать системную кодировку
Отправлено: wester от Август 17, 2012, 15:59
Вторую ссылку уже видел. Увы, решения там нет. Да и проблема не в том, что данные пишутся не так, с этим как раз все в порядке. Нужно именно узнать что за кодировка используется в системе. Например, в Linux у меня системная UTF-8, в винде — CP1251. Но и там, и там QTextCodec::codecForLocale()->name() возвращает "System".
3 - я ссылка на stackoverflow
Там написаны названия api функций для windows для определения кодировки, конкретно  GetACP и GetOEMCP

а ссылку на багтрекер дал, что бы просто посмотреть что о проблеме известно, но заниматься ее решением не хотят


Название: Re: Узнать системную кодировку
Отправлено: xintrea от Сентябрь 23, 2018, 18:04
Вот эти две статьи должны помочь:

Как в Qt работать с русскими именами файлов и директорий в Windows (https://webhamster.ru/mytetrashare/index/mtb0/1537709346xwr0z7v1a4)

Как в Qt узнать системную кодировку локали под Windows (https://webhamster.ru/mytetrashare/index/mtb0/1537713575ehtkimuwz7)