java string 解码_java字符串解码处理

java处理一个用delphi语言加了密的字符串,可获得对应的ascii数值,如果一般的英文通过(char)x的方式就能转换成对应的英文字符,但是对于中文,会有2个对应的数值,这个怎么拼装能还原为对应的中文?源码如下:

//*******************************************************************

加密字符串为:15ffac3e55,解码后正确的结果应该是“A胡”

//*******************************************************************

//示例

AJ2013XorEnDecode tt = new XorEnDecode();

System.out.println(tt.xorDecode(“TEV3_TJGLXT.2013”, “15ffac3e55”));

//解密类的源码***************************************************************************

public class XorEnDecode {

private int StrToIntDef(String str,int defaultint){

try {

return Integer.parseInt(str,16);

}

catch (Exception e) {

return defaultint;

}

}

public String xorDecode(String Key, String Source){

//解密Express

char C;

String Result="";

for (int i = 0; i < Math.floor(Source.length()/2)-1; i++) {

C = (char)StrToIntDef(Source.substring((i * 2) , (i * 2) + 2),32);

if (Key.length() > 0) {

C = (char)((int)Key.charAt((i % Key.length())) ^ (int)C)  ;

}

Result = Result + C;

}

return Result;

}

}

其实问题就出在 Result = Result + C; 这个连接的C值上,对应英文这样连接OK的,对于中文就有问题了。

在delphi里这个C值如果不是个正常的字符,用chr()进行转换,它会保留原先的ascii的值,直接参与后面的连接,通过2次单字节的连接后,就能转换成对应的中文。 但在java里单字节C值就会转换成特殊字符,所以就变成乱码。 刚刚接触JAVA,不知道如何破。

Java的字符串相加就是真的字符串相加,它不是字节码组合,所以你需要先解密成字节码最后转换成字符串。

代码:

public String xorDecode(String Key, String Source) {

// 解密Express

int C;

ByteArrayOutputStream bos = new ByteArrayOutputStream();

for (int i = 0; i < Math.floor(Source.length() / 2) - 1; i++) {

C = StrToIntDef(Source.substring((i * 2), (i * 2) + 2), 32);

if (Key.length() > 0) {

C = (int) Key.charAt((i % Key.length())) ^ (int) C;

}

bos.write(C);

}

try {

return new String(bos.toByteArray(), "GBK");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

return null;

}

}

输出:A胡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值