捕捉到的 SAP 异常是乱码
SAP Exception caught is gibberish
我在本地电脑上测试的时候是英文的
当我部署到位于 HK\China 的 Web 服务器时,它是乱码。
我已经强制文化信息变成英文了,还是一样。
无论如何我都想用英文记录异常,然后相应地向用户显示异常,但不是乱码。
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
try
{
...
}
catch (SAP.Connector.RfcSystemException rfcSystemException)
{
LogHandler.LogError(logger, "", rfcSystemException);
ShowMessage("RfcSystemException", rfcSystemException.Message);
}
Message: Material XXX not maintained in plant YYY
Error Code: RFC_ERROR_SYSTEM_FAILURE
Source: SAP.Connector.Rfc
Stack trace:
at SAP.Connector.SAPConnection.ThrowRfcException(RFC_ERROR_INFO_EX rfcerrInfo, Encoding encoding, String languangeCode)
at SAP.Connector.Rfc.RfcClient.RfcInvoke(SAPClient proxy, String method, Object[] methodParamsIn)
at SAP.Connector.SAPClient.SAPInvoke(String method, Object[] methodParamsIn)
at DrawingReq_BAPI.SAPProxy1.Zats_Create_Sourcelist(String Material, String Plant, String Purorg, String Valid_From, String Valid_To, String Vendor_Code)
at ComparePrice.btnUpload_Click(Object sender, EventArgs e) in d:\TFS\XXX\ComparePrice.aspx.cs:line 688
应该不是乱码,应该是中文吧
至于异常,切换线程 CurrentUICulture 将更改生成异常所用的语言,但它确实需要在程序 运行 所在的操作系统上安装该语言。
您可以使用 CultureInfo.InvariantCulture 来实现这一点,它使用英语进行字符串本地化。
我现在不知道你定义的是什么乱码,但根据你的描述,unicode/non-unicode 可能是个问题。
您使用的是带有 SM59 的 TCP/IP-Connection,对吧?
您可以对该连接进行 Unicode 测试吗?
有人告诉我使用 SAP .Net Connector 3.0 调用这些 RFC,捕获到的异常消息会根据连接字符串中设置的语言显示,不再是乱码。
我在本地电脑上测试的时候是英文的
当我部署到位于 HK\China 的 Web 服务器时,它是乱码。
我已经强制文化信息变成英文了,还是一样。
无论如何我都想用英文记录异常,然后相应地向用户显示异常,但不是乱码。
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
try
{
...
}
catch (SAP.Connector.RfcSystemException rfcSystemException)
{
LogHandler.LogError(logger, "", rfcSystemException);
ShowMessage("RfcSystemException", rfcSystemException.Message);
}
Message: Material XXX not maintained in plant YYY
Error Code: RFC_ERROR_SYSTEM_FAILURE
Source: SAP.Connector.Rfc
Stack trace:
at SAP.Connector.SAPConnection.ThrowRfcException(RFC_ERROR_INFO_EX rfcerrInfo, Encoding encoding, String languangeCode) at SAP.Connector.Rfc.RfcClient.RfcInvoke(SAPClient proxy, String method, Object[] methodParamsIn) at SAP.Connector.SAPClient.SAPInvoke(String method, Object[] methodParamsIn) at DrawingReq_BAPI.SAPProxy1.Zats_Create_Sourcelist(String Material, String Plant, String Purorg, String Valid_From, String Valid_To, String Vendor_Code) at ComparePrice.btnUpload_Click(Object sender, EventArgs e) in d:\TFS\XXX\ComparePrice.aspx.cs:line 688
应该不是乱码,应该是中文吧
至于异常,切换线程 CurrentUICulture 将更改生成异常所用的语言,但它确实需要在程序 运行 所在的操作系统上安装该语言。
您可以使用 CultureInfo.InvariantCulture 来实现这一点,它使用英语进行字符串本地化。
我现在不知道你定义的是什么乱码,但根据你的描述,unicode/non-unicode 可能是个问题。
您使用的是带有 SM59 的 TCP/IP-Connection,对吧? 您可以对该连接进行 Unicode 测试吗?
有人告诉我使用 SAP .Net Connector 3.0 调用这些 RFC,捕获到的异常消息会根据连接字符串中设置的语言显示,不再是乱码。