| ||||
| ||||
Есть проблема с русским языком в создаваемых в Delphi сертификатах, а именно в качестве Common Name пытаюсь вбить любое русское слово, предварительно закодировав его в UTF8, при запролнении соответствующей структуры CERT_RDN_ATTR указываю кодировку UTF8. В созданном же сертификате всякие каракули. Тестировал под Win 2000 Server. Создаётся впечатление, что кодируется в UTF8 неправильно. Пробовал кодировать в UTF и с помощью VCL функций и с помощью API - результат один. Может просмоторщик сертификатов в винде не понимает? Хотя другие сертификаты с русскми полями отображаются нормально. Вот кусок кода заполнения структуры: {Переменные для конвертации строки} var cbWideString : integer; var pWideString : PWideChar; var pUtfString : PChar; begin func_result := 0; {Заполняем структуры CERT_RDN_ATTR} {Заполняем 0ю структуру} cbWideString := Length(certProp.CN) * 3; pWideString := PWideChar(AllocMem(cbWideString)); pUtfString := PChar(AllocMem(cbWideString)); MultiByteToWideChar(CP_ACP, MB_COMPOSITE, PAnsiChar(certProp.CN), Length(certProp.CN), pWideString, cbWideString); // StringToWideChar(certProp.CN, pWideString, cbWideString); WideCharToMultiByte(CP_UTF8, 0, pWideString, -1, pUtfString, cbWideString, 0, 0); // cbWideString := UnicodeToUtf8(pUtfString, pWideString, cbWideString); certRDNAttr[0].Value.cbData := cbWideString; certRDNAttr[0].Value.pbData := PByte(pUtfString); certRDNAttr[0].pszObjId := szOID_COMMON_NAME; certRDNAttr[0].dwValueType := CERT_RDN_UTF8_STRING; Как видите, в комментариях VCL способ. Подскажите пожалуйста в чём может быть дело, уже всё иcпробовал! | ||||
Ответы: | ||||
| ||||
Проблема уже решена! Нужно было кодировать не в UTF8, а в UNICODE (CERT_RDN_UNICODE_STRING) - тогда всё нормально. | ||||