微信公众号入门笔记(四)velocity生成xml中文转义问题
2016-02-16 00:03
615 查看
作者: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();
}
我对原来的代码做了重构,主要是用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();
}
相关文章推荐
- 微信转账免费提现收费 9个你最想知道的答案
- 微信将对提现收取手续费:费率0.1% 最少0.1元
- 银行否认向微信收费 微信收费是因为“扛不住了”?
- [Java小程序]连续字符串替换
- perl 微信 字符集问题
- Android 接入微信支付如此简单
- 绑定微信公众平台提示“请求URL超时”解决办法(转)
- 微信红包的算法实现
- Android 微信摇骰子
- 微信加粉方法(很使用很全面)
- 微信公众平台java开发详解(工程代码+解析)
- 实例
- 姚博文 blackberry10 微信 朋友圈 打不开
- 多媒体&QQ绑定
- 刮刮乐
- 秒杀
- 开发微信分享功能时可能遇到的问题和解决办法
- 微信开发踩坑之旅 之 开发准备及服务器配置
- 调用微信退款接口时出现System.Security.Cryptography.CryptographicException: 出现了内部错误 解决办法
- WAP站