2016-09-19 5 views
0

Oracle 11.2サーバーからUTL_HTTPパッケージを使用して安らかなWebサービスを呼び出すプロシージャを作成しました。それはポストリクエストで、私はvarchar2として定義された他のデータとともにアラビア語の価値を送ります。PL SQL UTL_HTTP快適なWeb​​サービスコールが機能しない

ロギングをチェックしたWebサービスにアラビア文字列が「???? ????」として送信されます。私は本体をUTF-8に設定し、データベースサーバーの文字セットは "AR8ISO8859P6"です。

私は変換機能を試して、最後の2日間可能でした。私はそれを修正する方法を理解できませんでした。これについて専門家が助けることができればと感謝します。前もって感謝します。

以下のコードを見つけます。

t_request_body := 
     '{ 
"ArabicValue":"' 
     || p_arabic_value 
     || '", 
"EnglishValue":"' 
     || p_english_value 
     || '" 
}'; 

    UTL_HTTP.set_transfer_timeout (5); 
    t_http_req := 
     UTL_HTTP.begin_request 
     ('webservice_url', 
      'POST', 
      'HTTP/1.1' 
     ); 
    /*Describe in the request-header*/ 
    UTL_HTTP.SET_BODY_CHARSET('UTF-8'); 
    UTL_HTTP.set_header (t_http_req, 'Content-Type', 'application/json;charset=UTF-8'); 
    UTL_HTTP.set_header (t_http_req, 'Content-Length', LENGTH (t_request_body)); 
    UTL_HTTP.set_header (t_http_req, 'TransactionId', t_transaction_id); 
    UTL_HTTP.set_header (t_http_req, 'Accept', 'application/xml'); 

    /*Put the data in de body of the request*/ 
    UTL_HTTP.write_text (t_http_req, t_request_body); 
/*Web service call*/ 
    t_http_resp := UTL_HTTP.get_response (t_http_req); 
/*Reading transaction id from header*/ 
    UTL_HTTP.get_header_by_name (t_http_resp, 'TransactionId', t_trans); 

英語のパラメータがウェブサービスに正しく渡しています。アラビア語の価値は "????? ????"になります。私はオラクルで利用可能な変換関数をUTF-8に変換しようとしました。それも働いていない。もし誰かがこれを解決する方法を知っていれば助けてください。

答えて

0

は、以下を使用:

length_bytes:=長さ(utl_raw.convert(utl_raw.cast_to_raw(t_request_body)、 'AL32UTF8'、 'AR8ISO8859P6'));

UTL_HTTP.set_header(t_http_req、 'Content-Length'、length_bytes);

UTL_HTTP.write_raw(t_http_req、t_request_body);

関連する問題