MyTetra Share
Делитесь знаниями!
Как в Qt узнать системную кодировку локали под Windows
Время создания: 23.09.2018 17:39
Текстовые метки: qt, qt5, локаль, системная, кодировка, Windows
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Локализация
Запись: xintrea/mytetra_syncro/master/base/15377135758eat100ki6/text.html на raw.github.com

Чтобы узнать системную кодировку в Windows, надо понимать, что в Qt нет готовых методов. Поэтому получение системной кодировки (она же кодировка локали) придется делать с помощью функции WinAPI GetACP() и условной компиляции. А с помощью Windows-функции GetOEMCP() можно узнать кодировку консоли.


Код будет выглядеть примерно так:



#ifdef Q_OS_WIN32

#include "windows.h"

#endif


using namespace std;



// Кодировка локали

QString getSystemCodepage()

{

#ifdef Q_OS_WIN32

return "CP "+QString::number( GetACP() );

#endif


#ifdef Q_OS_LINUX

return "UTF-8");

#endif


return "";

}



// Кодировка консоли

QString getConsoleCodepage()

{

#ifdef Q_OS_WIN32

return "CP "+QString::number( GetOEMCP() );

#endif


#ifdef Q_OS_LINUX

return "UTF-8");

#endif


return "";

}



А использовать эту функцию можно примерно так:



QString codePage=getSystemCodepage();

qDebug() << "System code page: " << codePage;

if(codePage.size()>0) {

QTextCodec::setCodecForLocale(QTextCodec::codecForName(codePage.toLatin1()));

}


QString consoleCodePage=getConsoleCodepage();

qDebug() << "Console code page: " << consoleCodePage;



После выполнения такого кода в русскоязычной Windows, в Qt-приложении будет установлена кодировка локали CP1251. Кодировка локали для Windows - это та кодировка, в которой записываются имена файлов и директорий. Однако следует помнить, что в Windows по историческим причинам кодировка консоли отличается, и в русскоязычной Windows для консоли принята кодировка CP 866. Поэтому вышеприведенный код напечатает следующее:



System code page: "CP 1251"

Console code page: "CP 866"



О том, как можно одновременно работать с двумя кодировками, рассказывается в статье Как в Qt работать с русскими именами файлов и директорий под Windows.


 
MyTetra Share v.0.65
Яндекс индекс цитирования