捕捉到的 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,捕获到的异常消息会根据连接字符串中设置的语言显示,不再是乱码。