Russian Qt Forum
Ноябрь 22, 2024, 15:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Узнать системную кодировку  (Прочитано 8845 раз)
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
Записан
wester
Гость
« Ответ #1 : Август 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
Записан
voltron
Гость
« Ответ #2 : Август 17, 2012, 13:51 »

Системы разные: Windows, Linux, Mac.

Вторую ссылку уже видел. Увы, решения там нет. Да и проблема не в том, что данные пишутся не так, с этим как раз все в порядке. Нужно именно узнать что за кодировка используется в системе. Например, в Linux у меня системная UTF-8, в винде — CP1251. Но и там, и там QTextCodec::codecForLocale()->name() возвращает "System".
Записан
Serr500
Гость
« Ответ #3 : Август 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
Видимо, придётся использовать родные для каждой системы функции чтобы получить правильное значение кодировки.
Записан
wester
Гость
« Ответ #4 : Август 17, 2012, 15:59 »

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

а ссылку на багтрекер дал, что бы просто посмотреть что о проблеме известно, но заниматься ее решением не хотят
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #5 : Сентябрь 23, 2018, 18:04 »

Вот эти две статьи должны помочь:

Как в Qt работать с русскими именами файлов и директорий в Windows

Как в Qt узнать системную кодировку локали под Windows
Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 23.