0

関数モジュールを使用して RFC を介して PHP と通信しています。関数モジュールから PHP に中国語の文字を送信しようとしましたが、PHP 側では ###### の形式で中国語の文字を取得しています。

PHP側とSAP側のどちらに問題があるのか​​ わかりませんか?この問題を修正するには、どちらの側に焦点を当てる必要があるかを誰かに提案してください。または中国語の文字をPHPに送信する他の方法はありますか?

SAP FM コード:FN 名: ZMM_PHP_TO_SAP

     t_log-msgty = 'E'.
    CONCATENATE p_uname '用户无检料权限' INTO t_log-msgtx SEPARATED BY space.
    APPEND t_log.

PHP コード:

 $LOGIN = array ("ASHOST"=>$row_login1["sap_server"],
            "SYSNR"=>$row_login1["sap_system_number"],
            "CLIENT"=>$row_login1["sap_client"],
            "USER"=>$row_login1["sap_username"],
            "PASSWD"=>$row_login1["sap_password"],
            "CODEPAGE"=>"8300");

$rfc = saprfc_open ($LOGIN);

if(!$rfc){
$error=saprfc_error();
return "The RFC connection has failed with the following error:".saprfc_error();
exit;}
$fce = saprfc_function_discover($rfc,"ZMM_PHP_TO_SAP");
if(!$fce){
    return "The function module has failed.";
    return $rfc;
    exit;}saprfc_import ($fce,"P_UNAME","demo-china");
saprfc_table_init ($fce,"T_LOG");

// Call and execute the function
$rc = saprfc_call_and_receive ($fce);
if ($rfc_rc != SAPRFC_OK){
    if ($rfc == SAPRFC_EXCEPTION ){
        echo ("Exception raised: ".saprfc_exception($fce));
    } else {
        echo ("Call error: ".saprfc_error($fce));
    }
    echo "failure";
    exit;
}
$data_row = saprfc_table_rows ($fce,"T_LOG");
    $log_msg='';
    if($data_row != 0 || $data_row != '')   
    {
        for ($i=1; $i<=$data_row; $i++)
        {
        $DATA = saprfc_table_read ($fce,"T_LOG",$i);
        echo $DATA['MSGTX'];
            if($DATA['MSGTY'] == "E")
            {
            $log_msg =$DATA['MSGTX'];
            }
            if($DATA['MSGNO'] == "D")
            {
            $log_msg ="D";

            }

        }
    }

$DATA['MSGTX'] を印刷しようとすると、出力は DEMO-CHINA ¥Î###®Æ# になります。正確な漢字を取得する方法。前もって感謝します。

4

2 に答える 2

0

まず第一に、どのプログラミング言語でも、特に ABAP では、文字/文字列をハードコーディングしないでください。ほとんどの場合、SAP システムは多言語システムであり、国際的に利用されているため、ある環境でハードコードされた記号が別の環境では異なる解釈になる可能性があります。環境という用語では、ログオン言語、ユーザー パラメータなどを意味します。

したがって、FM の呼び出し中にリテラルがどのように処理されるか正確にはわかりません。この場合に実行できる手順は次のとおりです。

  1. 何よりもまず、CONCATENATEステートメント内のリテラルをtext-symbolに変換します。テキストシンボルは、文字列を ABAP に格納するための推奨される方法です。
  2. 次に、SAP システムが Unicode であるかどうかを確認することをお勧めします。これは、システム > ステータス > Unicode システムメニューから実行できます。お使いのシステムが非 Unicode である可能性はほとんどありませんが、それでもなお、このチェックは大いに歓迎されます。

  3. [オプション]このステップはオプションであり、システムが非 Unicode である場合にのみ意味がありますが、いずれにしても有用です。ステートメントで環境コードページを中国語に設定します

    SET LOCALE LANGUAGE 1.
    

    ステートメントを FM の先頭に入れます。

  4. また、汎用モジュールで Unicode システム チェックが有効になっていることを確認することも賢明です。これを行うには、[移動] > [メイン プログラム] > [移動] > [属性] に移動し、[ Unicode チェックがアクティブ] チェックボックスがアクティブになっていることを確認してください。

于 2016-02-15T12:12:59.780 に答える