4

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

              "Unicode clients require a unicode enabled server."

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

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

我还尝试在 p4.Run 命令之前更改字符集:

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

我尝试将字符集设置为“无”、空值和“”。

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

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

因“未知命令”而失败

有没有人在 P4.Net 脚本中更改 P4CHARSET 有任何成功?你怎么做呢?

4

4 回答 4

2

您是否尝试过从注册表设置中删除 P4CHARSET 和 P4COMMANDCHARSET?它们应该位于 HKEY_CURRENT_USER.Software.Perforce.Environment。我之前也遇到过和你类似的情况,所以我最终解决了这个问题。

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

更新

C++ API 正在检测 Unicode 字符集,因为 P4CHARSET 设置为无。p4 set P4CHARSET=从命令行运行解决了海报的问题。

于 2011-03-16T22:49:43.537 回答
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);where 0is CharSetApi::CharSet::NOCONVit works 设置翻译。

我想我将不得不使用修改后的源。太糟糕了。

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

于 2011-03-09T19:14:31.020 回答
0

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

于 2011-03-09T01:54:12.743 回答
0

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

于 2011-03-16T21:58:11.663 回答