P4.Net和P4CHARSET

时间:2011-03-09 01:50:53

标签: .net perforce p4.net

我正在使用P4.Net连接到我的非unicode服务器,但是我运行的一些命令失败了:

              "Unicode clients require a unicode enabled server."

如何在P4.Net中将P4CHARSET更改为none?我试过了

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

我也尝试在p4.Run命令之前更改Charset:

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

我尝试将Charset设置为“none”,null和“”。

如果我尝试将全局选项传递给p4.Run命令,它也不起作用。即

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

以“未知命令”

失败

有没有人在P4.Net脚本中更改P4CHARSET有什么成功?你是怎么做到的?

4 个答案:

答案 0 :(得分:2)

您是否尝试过从注册表设置中获取P4CHARSET和P4COMMANDCHARSET?它们应该位于HKEY_CURRENT_USER.Software.Perforce.Environment。我之前遇到过与你类似的情况,这就是我最终修复它的方式。

另外,您使用的是P4Win还是P4V?我不完全确定P4V,但我知道P4Win似乎每个连接存储字符集信息。也许这可能会以某种方式干扰P4.NET?

<强>更新

C ++ API检测到Unicode字符集,因为P4CHARSET设置为none。从命令行运行p4 set P4CHARSET=修复了海报的问题。

答案 1 :(得分:1)

我认为问题是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()对于非unicode服务器也是非零的,即。 P4CHARSET"none"

如果我使用getClientApi()->SetTrans(0, 0, 0, 0);设置翻译,其中0CharSetApi::CharSet::NOCONV则有效。

我想我必须使用修改过的来源。太糟糕了。

有没有人有更好的方法来做到这一点?

答案 2 :(得分:0)

p4.Charset设置为"iso8859-1"或其他一些字符集。

答案 3 :(得分:0)

如果您要连接到非unicode服务器,则根本不应设置p4.Charset。如果您正在创建一个需要连接到unicode和非unicode服务器的客户端,那么我认为您可以将Charset设置为非unicode的空字符串,否则设置其中一个有效的字符集。