P4.Net и P4CHARSET

Я использую P4.Net для подключения к своему серверу, не поддерживающему Unicode, однако некоторые команды, которые я запускаю, не работают:

              "Unicode clients require a unicode enabled server."

как я могу изменить P4CHARSET на нет в P4.Net? я пробовал

              P4Connection p4 = new P4Connection();
              p4.Charset = "none"
              p4.Connect()

Я также попытался изменить Charset перед командой p4.Run:

              p4.Charset = "none"
              p4.Run("where", "c:\\some\\random\\dir");

Я попытался установить для Charset значение "none", null и "".

если я попытаюсь передать глобальные параметры команде p4.Run, это тоже не сработает. то есть.

              p4.Run("-C none where", "c:\\some\\random\\dir");

не удается с "неизвестной командой"

кто-нибудь имел успех с изменением P4CHARSET в сценарии P4.Net? как ты делаешь это?

4 ответа

Решение

Вы пробовали обстреливать P4CHARSET и P4COMMANDCHARSET из настроек реестра? Они должны быть в HKEY_CURRENT_USER.Software.Perforce.Environment. Я был в ситуации, похожей на вашу, и вот так я все исправил.

Кроме того, вы используете P4Win или P4V? Я не совсем уверен насчет P4V, но я знаю, что P4Win, похоже, хранил информацию о кодировке для каждого соединения. Может быть, это как-то мешает P4.NET?

ОБНОВИТЬ

API C++ обнаружил кодировку Unicode, потому что для P4CHARSET было установлено значение none. Бег p4 set P4CHARSET= из командной строки исправлена ​​проблема с постером.

Я думаю, что проблема заключается в следующем коде в ClientApi_m.cpp:


 void p4dn::ClientApi::Init( p4dn::Error* e ) 
 { 
    if(getClientApi()->GetCharset().Length() > 0)
    {
        // unicode server use UTF-8
        _encoding = new System::Text::UTF8Encoding();

        // set the translations (use UTF-8 for everything but content).
        CharSetApi::CharSet content = CharSetApi::Lookup(getClientApi()->GetCharset().Text());
        getClientApi()->SetTrans(CharSetApi::CharSet::UTF_8, content, 
            CharSetApi::CharSet::UTF_8, CharSetApi::CharSet::UTF_8);
    }
    else
    {
        // non-unicode server use ANSI encoding
        _encoding = System::Text::Encoding::GetEncoding(1252);
    }
    getClientApi()->Init( e->get_InternalError() );
 }

так как getClientApi()->GetCharset().Length() не равен нулю и для не-юникодных серверов, т.е. P4CHARSET является "none",

если я установлю перевод с помощью getClientApi()->SetTrans(0, 0, 0, 0); где 0 является CharSetApi::CharSet::NOCONV оно работает.

Я думаю, мне придется использовать модифицированный источник. это отстой.

у кого-нибудь есть лучший способ сделать это?

Если вы подключаетесь к серверу, не поддерживающему юникод, вы не должны устанавливать p4.Charset вообще. Если вы создаете клиент, которому нужно подключаться как к серверам с поддержкой Unicode, так и к серверам без поддержки Unicode, то я думаю, что вы можете установить для Charset пустую строку для не-Unicode, а в противном случае - одну из допустимых кодировок.

Задавать p4.Charset в "iso8859-1" или какая-то другая кодировка.

Другие вопросы по тегам