簡體   English   中英

Java 7使用重音符解碼base64字符串

[英]java 7 decode base64 String with accent

我在解碼像這樣用Oracle pl / sql編碼的pl / sql編碼的字符串時遇到問題

SET SERVEROUTPUT ON DECLARE

l_vc_var1 VARCHAR2(32767):='nat=Assurés%20CNRPS';

l_rw_var2 RAW(32767);

BEGIN

dbms_output.put_line('Original string: '||l_vc_var1);

l_rw_var2:= utl_raw.cast_to_raw(l_vc_var1);

dbms_output.put_line('Original RAW string: '||l_rw_var2);

l_rw_var2:= utl_encode.base64_encode(l_rw_var2);

dbms_output.put_line('Encoded RAW string: '||l_rw_var2);

l_rw_var2:= utl_encode.base64_decode(l_rw_var2);

dbms_output.put_line('Decoded RAW string: '||l_rw_var2);

l_vc_var1:=utl_raw.cast_to_varchar2(l_rw_var2);

dbms_output.put_line('Decoded Original string: '||l_vc_var1);

END;

/

sqldeveloper中的結果:

原始字符串:nat =Assurés%20CSS原始RAW字符串:6E61743D4173737572E973253230435353編碼的RAW字符串:626D46305055467A6333567936584D6C4D6A424455314D3D解碼的RAW字符串:6E61743D4173737572E973253230435s解碼的原始字符串:nat = 20

我想像這樣用Java解碼String:

try {
    String base64 = "6E61743D4173737572E973253230435353";
    BigInteger bi = new BigInteger(base64, 16);
    byte[] bdata = bi.toByteArray();

    String temp = new String(bdata, "UTF-8");
    System.out.println("temp =   " + temp);

} catch (Exception ex) {
    ex.printStackTrace();
}

不幸的是,重音與java結果不正確:

temp = nat = Assur%20CSS

new String(bdata, "ISO-8859-1") ,ISO Latin-1。

"Windows-1252" (MS Windows Latin-1)將是一個超集,並且可能已由SQLDeveloper使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM