java - java 7用重音解码base64字符串
问题描述
我在解码用 pl/sql 编码的字符串时遇到问题,用 oracle 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 中的结果:
Original string: nat=Assurés%20CSS Original RAW string: 6E61743D4173737572E973253230435353 Encoded RAW string: 626D46305055467A6333567936584D6C4D6A424455314D3D Decoded RAW string: 6E61743D4173737572E973253230435353 Decoded Original string: nat=Assurés%20CSS
我想像这样用Java解码字符串:
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�s%20CSS
解决方案
new String(bdata, "ISO-8859-1")
, ISO 拉丁语-1。
"Windows-1252"
,MS Windows Latin-1,将是一个超集,并且可能被 SQLDeveloper 使用。
推荐阅读
- yii2 - Yii2 注销方法不允许 (#405)
- node.js - return res.status(401).json({ msg: "Auth Failed" });
- python - 在 Python Dataframe 中,如何根据每个唯一 ID 的日期匹配第一个事件并捕获该特定事件?
- python-3.x - 烧瓶错误:从应用程序导入视图 ImportError:无法导入名称“视图”
- python - 如何将第一列定义为 pd.read_csv 中的名称
- django - 赋值前引用的错误局部变量“实例”是什么意思
- ios - 如何修复滚动时从 UICollectionViewCell 中消失的图像
- r - py_call_impl 中的 IndexError
- python - 从经过训练的模型中了解 LSTM 训练和验证图及其指标 (LSTM Keras)
- javascript - 如何在某些情况下显示隐藏的图像