2015-05-29 20 views
9

Nella mia pagina coldfusion chiamo una procedura PL/SQL. Il modulo HTML è codificato utilizzando UTF-8, il DB Oracle ha la codifica WE8ISO8859P1. Quindi, che tipo di conversione avviene nel caso di i_value di seguito?Quale codifica viene utilizzata quando si chiama una procedura Oracle PL/SQL

Sono particolarmente interessato a ciò che accade a MS Word citazione di sinistra (che è codificata in UTF-8 come E28098). Quando decodifico i_value in PL/SQL, questo diventa 18 (Hex). Considerando che è U + 2018 questo ha un senso, ma mi chiedo ancora perché lo 20 sia ingoiato.

<CFSTOREDPROC PROCEDURE = "my_schema.lib.write_field" datasource="#datasource#"> 
     <cfprocparam cfsqltype="CF_SQL_VARCHAR" variable="i_name" value="remark" type="In"> 
     <cfprocparam cfsqltype="CF_SQL_VARCHAR" variable="i_value" value="#Form.remark#" type="In"> 
</CFSTOREDPROC> 
+0

Non sono un esperto di CF, quindi nessuna risposta, solo un commento: ogni ambiente client (e CF è un client per il DB Oracle) che si connette a un DB Oracle utilizza un env NLS_LANG. variabile per determinare il set di caratteri del client da utilizzare per le connessioni DB Oracle. Quindi, c'è un set di caratteri sul lato Oracle DB (WE8ISO8859P1), il secondo sulla pagina HTML (UTF8), il terzo sul server ColdFusion, presumo, e c'è, molto probabilmente, un quarto impostato per il Client Oracle in uso nel tuo server CF. Presumo che dovrai trovare quella particolare opzione e configurarla ad es. ENGLISH_AMERICA.AL32UTF8. – nop77svk

+0

La variabile NLS_LANG, ovviamente, può essere scambiata per qualche tipo di parametro dedicato nella connessione del DB Oracle. (ODP.NET lo fa, se ricordo male.) Comunque, il mio commento si applica - dovrete trovare la proprietà di connessione DB e configurarla. – nop77svk

+0

@ nop77svk Anche dopo aver conosciuto la codifica del client, vorrei sapere che tipo di conversione avviene. Ho notato che alcuni dei byte sembrano essere ingoiati quando vengono inviati al DB, ad es. la virgoletta singola sinistra (0x2018 in UTF-16) diventa solo 0x18 nel DB. – Roland

risposta

0

ColdFusion è basato su Java quindi suppongo che le variabili di stringa siano codificate utilizzando UTF-16.

Passando da UTF-16 (codifica a 2 byte) a una codifica a 1 byte (ad esempio WE8ISO8859P1) come nel mio esempio, l'MSB viene ignorato e viene considerato solo l'LSB.

Questo spiegherebbe il comportamento osservato: Ho notato che alcuni dei byte sembrano essere ingoiati quando inviati al DB, ad es. il left single quotation mark (0x2018 in UTF-16) diventa solo 0x18 nel DB.