我正在使用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有什么成功?你是怎么做到的?
答案 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);
设置翻译,其中0
为CharSetApi::CharSet::NOCONV
则有效。
我想我必须使用修改过的来源。太糟糕了。
有没有人有更好的方法来做到这一点?
答案 2 :(得分:0)
将p4.Charset
设置为"iso8859-1"
或其他一些字符集。
答案 3 :(得分:0)
如果您要连接到非unicode服务器,则根本不应设置p4.Charset。如果您正在创建一个需要连接到unicode和非unicode服务器的客户端,那么我认为您可以将Charset设置为非unicode的空字符串,否则设置其中一个有效的字符集。