java程序-Java程序,我建立个xml报文先转换成GBK,之后加密,再用UTF8传输发给外系统,中文出现乱码!

问题描述

Java程序,我建立个xml报文先转换成GBK,之后加密,再用UTF8传输发给外系统,中文出现乱码!

Document d = DocumentHelper.createDocument();
Element transaction = d.addElement("transaction"); //根节点
Element header = transaction.addElement("header"); //报文头
header.addElement("transcode").setText(transcode); //交易码(整合平台)
header.addElement("transagency").setText(transagency); //基层行社机构代号(整合平台)
header.addElement("businumb").setText(businumb); //基层行社业务代号(整合平台)
header.addElement("transteller").setText(transteller); //交易柜员
header.addElement("transchannel").setText(transchannel); //交易渠道
header.addElement("transserial").setText(transserial); //交易流水号
header.addElement("checktag").setText(""); //校验字串
Element body = transaction.addElement("body"); //报文体
Element request = body.addElement("request"); //报文请求
if( requestMap!=null ){
Set keys = requestMap.keySet();
//logger.debug("keys>>["+keys+"]");
for( String key : keys ){
//logger.debug("key:["+key+":"+requestMap.get(key)+"]");
if(requestMap.get(key)!=null){
request.addElement(key).setText(requestMap.get(key));
}else{
request.addElement(key).setText("");
}
}
}

// Map ictrl1Map = new HashMap();
// ictrl1Map = (Map)((Map) requestMap.get("ICTRL1"));
// if(requestMap.get("ICTRL1")!=null){
// Element ictrl1 = request.addElement("ICTRL1"); //报文请求(公共输入控制信息1)
// Set keys = ictrl1Map.keySet();
// logger.debug("keys:["+keys+"]");
// for( String key : keys ){
// logger.debug("key:["+key+"]");
// ictrl1.addElement(key).setText((String) ictrl1Map.get(key));
// }
//

// }
if( ictl1Map!=null ){
Set ictl1keys = ictl1Map.keySet();
//logger.debug("ictl1keys>>"+ictl1keys);
if(!ictl1keys.isEmpty()){
Element ictrl1 = request.addElement("ICTRL1"); //报文请求(公共输入控制信息1)
for( String ictl1key : ictl1keys ){
//logger.debug("ictl1key:["+ictl1key+":"+ictl1Map.get(ictl1key)+"]");
ictrl1.addElement(ictl1key).setText(replaceNullString((String) ictl1Map.get(ictl1key)));
}
}
}
if( ictl2Map!=null ){
Set ictrl2keys = ictl2Map.keySet();
//logger.debug("ictrl2keys>>"+ictrl2keys);
if(!ictrl2keys.isEmpty()){
Element ictrl2 = request.addElement("ICTRL2"); //报文请求(公共输入控制信息1)
for( String ictrl2key : ictrl2keys ){
//logger.debug("ictrl2key:["+ictrl2key+":"+ictl2Map.get(ictrl2key)+"]");
ictrl2.addElement(ictrl2key).setText(replaceNullString((String) ictl2Map.get(ictrl2key)));
}
}
}

    OutputFormat out = OutputFormat.createPrettyPrint();////设置XML文档输出格式
        out.setNewLineAfterDeclaration(false);
        out.setEncoding(Constants.CHARSET_GBK);//设置XML文档的编码类型GBK
        // out.setIndent(true);     //设置是否缩进
        // out.setIndent(" ");      //设置以空格方式实现缩进,可兼容文本编辑
        // out.setNewlines(true);   //设置是否换行
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    XMLWriter w = new XMLWriter(baos,out);
    w.write(d);
    w.close();

    String msg = null;
    msg = new String(baos.toByteArray(),Constants.CHARSET_GBK);//GBK
    logger.info("@[buildCommbuf]加密前交易报文GBK:n"+msg);

/***Modified in 20150504 for zhptdes
byte[] mw = DesUtil.encrypt(baos.toByteArray(), this.getPassword());
// logger.debug("@mw:n["+Arrays.toString(mw)+"]");
String hexMw = DesUtil.bytes2hex(mw);
****/
/*Add for msgTrace test*/
msgTrace(transserial, transcode, transteller, msg);
/*Add for msgTrace test*/

    //加密处理
    String hexMw = null;

// logger.debug("--pincrypt["+pincrypt+"]makcrypt["+makcrypt+"]");
if(transcode.equals(Constants.TRANID_MYCZ)){ //800009密钥重置申请
logger.info("[parseCommbuf]交易码:"+transcode+"依据PINCRYPTBLOCK["+pincrypt+"]加密"+new String(baos.toByteArray(),Constants.CHARSET_GBK));
hexMw = DesHostUtil.hostEncrypt(new String(baos.toByteArray()),pincrypt);
}else{
logger.info("[parseCommbuf]交易码:"+transcode+"依据MAKCRYPTBLOCK["+makcrypt+"]加密");
hexMw = DesHostUtil.hostEncrypt(new String(baos.toByteArray()),makcrypt);
}

解决方案

xml报文先转换成utf-8试试呢?

解决方案二:

GBK你用UTF-8不是本来就会出现问题么。。。。

时间: 2024-08-03 22:33:38

java程序-Java程序,我建立个xml报文先转换成GBK,之后加密,再用UTF8传输发给外系统,中文出现乱码!的相关文章

Linux系统下java程序如何将Swf的每一帧都转换成图片?

问题描述 Linux系统下java程序如何将Swf的每一帧都转换成图片? Linux系统下java程序如何将Swf的每一帧都转换成图片? 解决方案 如何将pdf图片转换成jpg

加密-公钥(XML格式)转换成PEM格式

问题描述 公钥(XML格式)转换成PEM格式 iOS开发,加密方式是RSA,在请求数据后返回的格式是XML格式的公钥,但是要转换成PEM格式才可以参于编译,我知道有一个网站https://superdry.apphb.com/tools/online-rsa-key-converter给大家做个参考,但是这往往是不太安全的,我需要可将xml格式的公钥转换成pem格式.查了4.5天的资料,难道真的没有这种方法吗? 转之前: xA7SEU+e0yQH5rm9kbCDN9o3aPIo7HbP7tX6W

请教,VB.net 如何将xml文档转换成excel文档

问题描述 请教,VB.net如何将xml文档转换成excel文档,最好付上代码,谢谢! 解决方案 解决方案二:把xml数据放到内存表里再插入到新建的EXCEL表解决方案三:引用1楼notbb的回复: 把xml数据放到内存表里再插入到新建的EXCEL表 是用fastreport导出的excel文件,但实际上是一个xml文件,在手机上打不开.想把它转换成excel文件解决方案四:那简单啊.你直接用EXCEL打开方式打开你的报表文件,然后另存为EXCEL格式的文件就行了.或者新建个EXCEL文件,打开

Java实现DOM文档操作和XML文件互相转换

dom|xml|转换 本文简要描述了DOM的概念和内部逻辑结构,实例讲述DOM文档操作和XML文件互相转换的java实现过程. 1. DOM简介 目前,W3C已于2000年11月13日推出了规范DOM level 2.文档对象模型(DOM)是HTML和XML文档的编程接口规范,它与平台和语言是无关的,因而可以用各种语言在各种平台上实现.该模型定义了THML和XML文件在内存中的逻辑结构(即为文档),提供了访问.存取THML和XML文件的方法.利用DOM规范,可以实现DOM 文档和XML之间的相互

maven项目建立pom.xml报无法解析org.apache.maven.plugins:maven-resources-plugin:2.4.3

一.发现问题建立maven项目后,pom.xml在显示红叉,鼠标放上去,显示Execution default-testResources of goal org.apache.maven.plugins:maven-resources-plugin:2.4.3错误. 二.原因分析缺少maven-resources-plugin-2.4.3.jar或该文件下载不正确,可到repository\org\apache\maven\plugins\maven-resources-plugin\目录看看

java中 hex 转换成字符串 怎么转?用网上的代码转了后存在乱码,求高手解决。

问题描述 用了:1.http://aub.iteye.com/blog/11292282.http://blog.csdn.net/hzbigdog/article/details/6877712这2篇文章的方法,转出来都是乱码,求解!可以加我QQ:381195382非常感谢! 解决方案 直接使用apache common codec的Hex.decodeHex() 解码回来是byte数组再自己根据之前的编码 再转回到字符串如StringUtils.newStringUtf16

C#中如何把XML本地文件转换成XML字符串

System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.Load("E:\\voucher.xml"); doc.InnerXml; 注意:此时会将xml文件转化为不包含任何节点的字符串,比如: XmlDocument Xd = new XmlDocument(); Xd.Load("E:\\voucher.xml"); Xd.InnerXml 注意:此时会将xml文件转化为包含节点的字符串,比如

在Sql Server 2005中将主子表关系的XML文档转换成主子表“Join”形式的表

本文转载:http://www.cnblogs.com/Ricky81317/archive/2010/01/06/1640434.html   最近这段时间在Sql Server 2005下做了很多根据复杂XML文档导入数据表,以及根据数据表生成复杂XML文档的事情(并非 For XML Auto了事),所有的操作都是利用Sql语句,发现Sql Server 2005的XML文档处理能力真的已经很强了,自己也终于开始体会到Sql Server 2005真正的实力了.在这里记录一下这种情况的处理

C# XML本地文件转换成XML字符串

点击打开链接