2016-07-19 17 views
0

私はPL/SOLで新しく、パラメータを取るoracleからwebserviceを呼び出そうとしています...メッセージを送信します...実際には、アラビア語では疑問符でメッセージを送信していますか? 。 は、私は私のコンテンツタイプではなく、何を除いて働いている変更しようとしました:アラビア語パラメータを使用してOracleサービスからWebサービスを呼び出す

UTL_HTTP.set_header(l_http_request、 'Content-Typeの'、 ';のcharset =ウィンドウ-1256のアプリケーション/ x-www-form-urlencodedで');

アラビア語で同じ問題があります。あなたは私にヒントを与えることができますか?以下は私のコードです。

NB:同じWebサービスを呼び出して.netクライアントからパラメータを渡すと、メッセージはアラビア語で正しく送信されます。 あなたが

PROCEDURE HIMS_SEND_SMS (username Varchar2 , 
           password varchar2, 
           phone varchar2, 
           code varchar2, 
           message varchar2, 
           P_RESPONSE OUT VARCHAR2) AS 

    l_param_list  VARCHAR2(512); 
    l_http_request UTL_HTTP.req; 
    l_http_response UTL_HTTP.resp; 
    l_response_text VARCHAR2(32767); 
    soap_request  VARCHAR2(1024); 
    i integer; 


BEGIN 

dbms_output.enable(100000); 
utl_http.set_transfer_timeout(300); 


l_param_list := 'username='|| username ||chr(38)|| 'password='|| password ||chr(38)|| 'phone='|| phone ||chr(38)|| 'code='|| code ||chr(38)|| 'message='|| message; 

l_http_request := UTL_HTTP.begin_request ('http://serviceexample.com/service.asmx/SendSMSHTTP' 
              , 'POST' 
              , 'HTTP/1.1'); 

    UTL_HTTP.set_header(l_http_request, 'Content-Type', 'application/x-www-form-urlencoded; charset=windows-1256'); 

    --UTL_HTTP.set_header(l_http_request, 'Content-Type', 'text/plain; charset=windows-1256'); 

    --UTL_HTTP.set_header(l_http_request, 'Content-Type', 'application/soap+xml; charset=ISO-8859-6'); 

    --UTL_HTTP.set_header(l_http_request, 'Content-Type', 'text/xml'); 

    --UTL_HTTP.set_header(l_http_request, 'Content-Type', 'text/xml; charset=UTF-8'); 

    --UTL_HTTP.set_header(l_http_request, 'Content-Type', 'text/xml; charset=ASCII'); 

    UTL_HTTP.set_header(l_http_request, 'Content-Length', LENGTH(l_param_list)); 

    UTL_HTTP.write_text(l_http_request, l_param_list); 

    l_http_response := UTL_HTTP.get_response(l_http_request); 

    UTL_HTTP.read_text(l_http_response, l_response_text); 

-- l_response_text:= substr(l_response_text,92,1); 

    P_RESPONSE := l_response_text; 

    UTL_HTTP.end_response(l_http_response); 

EXCEPTION 

    WHEN UTL_HTTP.end_of_body 

    THEN UTL_HTTP.end_response(l_http_response); 

END HIMS_SEND_SMS; 

答えて

0

私は漢字で働いたありがとう、と私は同じ問題を抱えていました。本文の文字セットをUTF-8に設定すると、それが解決されました。長さをLENGTHBに変更します。このhere

PROCEDURE HIMS_SEND_SMS (username Varchar2 , 
           password varchar2, 
           phone varchar2, 
           code varchar2, 
           message varchar2, 
           P_RESPONSE OUT VARCHAR2) AS 

    l_param_list  VARCHAR2(512); 
    l_http_request UTL_HTTP.req; 
    l_http_response UTL_HTTP.resp; 
    l_response_text VARCHAR2(32767); 
    soap_request  VARCHAR2(1024); 
    i integer; 


BEGIN 

dbms_output.enable(100000); 
utl_http.set_transfer_timeout(300); 


l_param_list := 'username='|| username ||chr(38)|| 'password='|| password ||chr(38)|| 'phone='|| phone ||chr(38)|| 'code='|| code ||chr(38)|| 'message='|| message; 

l_http_request := UTL_HTTP.begin_request ('http://serviceexample.com/service.asmx/SendSMSHTTP' 
              , 'POST' 
              , 'HTTP/1.1'); 

    UTL_HTTP.set_header(l_http_request, 'Content-Type', 'application/x-www-form-urlencoded; charset=windows-1256'); 

    --UTL_HTTP.set_header(l_http_request, 'Content-Type', 'text/plain; charset=windows-1256'); 

--UTL_HTTP.set_header(l_http_request, 'Content-Type', 'application/soap+xml; charset=ISO-8859-6'); 

    --UTL_HTTP.set_header(l_http_request, 'Content-Type', 'text/xml'); 

    --UTL_HTTP.set_header(l_http_request, 'Content-Type', 'text/xml; charset=UTF-8'); 

    --UTL_HTTP.set_header(l_http_request, 'Content-Type', 'text/xml; charset=ASCII'); 

    --Change to LENGTHB here 
    UTL_HTTP.set_header(l_http_request, 'Content-Length', LENGTHB(l_param_list)); 

    --change charset: 
    UTL_HTTP.set_body_charset(l_http_request, 'UTF-8'); 

    UTL_HTTP.write_text(l_http_request, l_param_list); 

    l_http_response := UTL_HTTP.get_response(l_http_request); 

    UTL_HTTP.read_text(l_http_response, l_response_text); 

-- l_response_text:= substr(l_response_text,92,1); 

    P_RESPONSE := l_response_text; 

    UTL_HTTP.end_response(l_http_response); 

EXCEPTION 

    WHEN UTL_HTTP.end_of_body 

    THEN UTL_HTTP.end_response(l_http_response); 

END HIMS_SEND_SMS; 

より、およびhere

+0

は、まあ、私はこのソリューションを試してみましたが、私はまだ同じ問題を抱えている:これを試してみてください。それは、オラクル自身がアラビア語のパラメータを受け入れていないようです。言い換えれば、アラビア語を書こうとするたびに、オラクルはそれらをアラビア語に変換しています。私のwebsericeを呼び出す前に。どのようにこの問題を解決するための任意のアイデアですか? –

+0

@ H.Alそれは確かにOracleではありません。それはあなたのデータベース設定かもしれません。次のクエリを実行しようとしましたか? 'select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET';'。何を手に入れますか? – Hawk

+0

私はアラビア語を書こうとするたびにAR8MSWIN1256 –

関連する問題