P4.Net и P4CHARSET - PullRequest
       40

P4.Net и P4CHARSET

3 голосов
/ 09 марта 2011

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

              "Unicode clients require a unicode enabled server."

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

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

Я также пытался изменить кодировку перед командой 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 ]

2 голосов
/ 17 марта 2011

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

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

ОБНОВЛЕНИЕ

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

1 голос
/ 09 марта 2011

Я думаю, что проблема заключается в следующем коде в 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, это работает.

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

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

0 голосов
/ 17 марта 2011

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

0 голосов
/ 09 марта 2011

Установите p4.Charset на "iso8859-1" или другую кодировку.

...