Не верная кодировка полей сертификата

Доброго времени суток
Пытался получить владельца сертификата, владелец фирма, название на русском языке, в итоге получаю иероглифы
Понятно, что дело в кодировке, но я не пойму как починить, пробовал конвертить в вчары, не помогло
В драйвере отображается все нормально
Подскажите в чем дело?

Сделал минимальный пример для демонстрации проблемы, ссылка гугл диск
https://drive.google.com/file/d/1yeNOwz … sp=sharing

(2023-10-25 18:45:11 отредактировано Евгений Мироненко)

Re: Не верная кодировка полей сертификата

Добрый день!
Спасибо за внимание к интерфейсу pki-core-cpp!
Как оказалось, возвращаемые строки в кодировке utf-8.
Этот совет со стековерфлоу решает вашу проблему: https://stackoverflow.com/a/77225440/2373171

#include <iostream>
#include <string>
#ifdef _WIN32
#include <windows.h>
#include <clocale>
#endif

int main() {
#ifdef _WIN32
  // console UTF-8
  std::setlocale(LC_CTYPE, ".UTF8");
  SetConsoleOutputCP(CP_UTF8);
  SetConsoleCP(CP_UTF8);
#endif

  std::string str = "";
  std::cout << str << std::endl;

  return 0;
}

(2023-10-26 10:01:08 отредактировано regnor)

Re: Не верная кодировка полей сертификата

Спасибо, с консолью был просто пример, так то нужно вывести в окно винапи
Но вы подсказали, что строка в кодировке utf-8
Написал функцию перевода, все работает, спасибо
Может кому то пригодиться

// Переводим в ANSI
int stringToANSI(std::string src, std::string& strANSI)
{
    int size = MultiByteToWideChar(CP_UTF8, NULL, src.c_str(), src.length(), NULL, NULL);
    if (size == 0)
    {
        return 1;
    }

    std::wstring w_str(size, 0);
    int err = MultiByteToWideChar(CP_UTF8, NULL, src.c_str(), src.length(), &w_str[0], size);
    if (err == 0)
    {
        return 2;
    }

    int strANSI_size = WideCharToMultiByte(CP_ACP, NULL, w_str.c_str(), w_str.length(), NULL, NULL, NULL, NULL);
    if (strANSI_size == 0)
    {
        return 3;
    }

    std::string ANSI_str(strANSI_size, 0);
    err = WideCharToMultiByte(CP_ACP, NULL, w_str.c_str(), ANSI_str.length(), &ANSI_str[0], strANSI_size, NULL, NULL);
    if (err == 0)
    {
        return 4;
    }

    strANSI = ANSI_str;

    return 0;
}