01.05.2005 20:09:15Русский язык в сертификатах Ответов: 1
Олег
Есть проблема с русским языком в создаваемых в 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пробовал!
 
Ответы:
02.05.2005 4:54:20Олег
Проблема уже решена! Нужно было кодировать не в UTF8, а в UNICODE (CERT_RDN_UNICODE_STRING) - тогда всё нормально.