微信公众号入门笔记四velocity生成xml中文转义问题

作者:zhutulang


我对原来的代码做了重构,主要是用velocity来生成返回报文,非常的方便。


在这其中遇到了一个问题,但只是一个配置问题,却因为没有注意浪费了大量时间。因此特地记录下。。。


我发现生成的xml返回报文中,中文“乱码”了。我期望返回的文本消息是:

you发给me的是文本消息:this is a test

可是,用velocity生成的返回报文中却成了:

you发给me的是文本消息:this is a test


当然,这不是乱码。那么这种&#开头的到底是什么鬼。这跟html实体字符类似,原来就是所谓的NCR(numeric character reference)。具体可以看这篇博客:http://www.cnblogs.com/shishm/archive/2011/11/24/2261996.html


实际上,这就是中文被转义了。因为我在velocity配置中配置了(第二行配置请忽略):

eventhandler.referenceinsertion.class = org.apache.velocity.app.event.implement.EscapeXmlReference
eventhandler.escape.xml.match = /RespMsg.*/

我在这里并不希望返回的xml报文对中文转义,可我为什么这么配置呢?因为这段配置我是从其它项目拷贝过来的。。。好吧,去掉就好了。


另外,velocity生成xml响应报文代码如下:

        /** 
	 * <p>Title: getXmlFromResponseMsg</p>
	 * <p>Description:根据velocity模板生成xml </p>
	 * @param vmName 模板名称
	 * @param responseMsg 响应消息对象
	 * @return
	 * @author zhutulang
	 * @version 1.0
	 */
	public static String getXmlFromResponseMsg(String vmName,BaseMsg responseMsg) {
	    StringWriter stringWriter = null;
		try {
		  stringWriter = new StringWriter();
	      Template localTemplate = ve.getTemplate(vmName,"UTF-8");
	      HashMap<String,Object> localHashMap = new HashMap<String,Object>();
	      localHashMap.put("RespMsg",responseMsg);
	      localTemplate.merge(new VelocityContext(localHashMap),stringWriter);
	      stringWriter.flush();
	    }catch (Exception localException){
	      log.error("从Velocity模板生成相应XML时发生错误。",localException);   
	    }
	    return stringWriter.toString();
	}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


网页授权获取用户信息的方法
报错config:invalid signature的解决方案
微信开发百思不得姐实战教程
详解微信开发input输入框
教你libco是如何支撑巨大数据信息量的
微信二次开发之文本消息请求与发送
微信开发H5轻游戏
scroll-view完成列表页的方法详解
Java微信开发之自定义菜单的创建
微信开发之input控件的实例详解
微信开发Emoji表情的实例教程
微信开发中详解textarea的使用方法
微信开发中使元素占满全屏的方法介绍
微信开发之数据访问的方法详解
微信二次开发之各类型消息封装
微信开发之数据库操作
如何获取微信好友的地理位置信息
分享3款微信开发开源框架
微信开发之获取服务器IP
微信开发之公交换乘功能代码详解