2016-07-19 28 views
0

Ich bin neu in PL/SOL und ich versuche, einen Webservice von Oracle, das Parameter akzeptiert und sendet Nachrichten ... Eigentlich funktioniert es gut, wenn ich Werte in Englisch, aber für Arabisch sendet es eine Nachricht mit Fragezeichen ???? . Ich versuchte, meine Art des Inhalts zu ändern, aber nichts funktioniert, außer:Aufruf von Webservice von Oracle-Problem mit arabischen Parametern

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

mit dem gleichen Problem in Arabisch.Können Sie mir einen Tipp geben? Unten ist mein Code.

Hinweis: Wenn ich Parameter von. Net-Client durch den Aufruf des gleichen Webservice übergeben, werden Nachrichten korrekt in Arabisch gesendet. Danke

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; 

Antwort

0

ich mit chinesischen Schriftzeichen gearbeitet, und ich hatte das gleiche Problem. Das Setzen des Body-Zeichensatzes auf UTF-8 löste es. Und ändere die Länge auf LENGTHB. Versuchen Sie folgendes:

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; 

Mehr zu diesem here und here

+0

Nun ich diese Lösung versucht, aber ich habe immer noch das gleiche Problem. Es scheint, dass Orakel selbst keine arabischen Parameter akzeptiert. Mit anderen Worten, wenn ich versuche, arabische Wörter zu schreiben, konvertiert Orakel sie in ???? bevor ich mein webserice anrufe. Irgendeine Idee, wie man dieses Problem löst? –

+0

@ H.Al Es ist sicherlich nicht Oracle. Es könnten Ihre Datenbankeinstellungen sein. Haben Sie versucht, die folgende Abfrage auszuführen: 'Wählen Sie den Wert aus nls_database_parameters mit Parameter = 'NLS_CHARACTERSET';'. Was bekommst du? – Hawk

+0

Ich habe diese AR8MSWIN1256 –