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"
или какая-то другая кодировка.