VeloCity velocity 乱码问题 解决总结 velocity
如果转载,请标明出处,作者
以下为网上遇到的问题:
问题1:
================================================
想请教个问题。我在vm中用
#set ($nn="中文")
hello $nn world!!
但是解释出来的是乱码。我在velocity.properties中设置了
input.encoding = gbk
output.encoding=gbk
default.contenttype=text/html;charset=gbk
但是还是乱码。
在vm模版中中文怎么正确显示出来啊,如何解决这个问题呀?
解决办法:
这里这样写的话的确存在以上遇到的情况。但是可以通过另外一种方式来解决。
这里
#set ($nn="中文")
可以通过把变量值在代码里面set,这样便可解决
模板代码可以就可以这样写了
代码:
publicstaticvoid main( String args[] ) throws Throwable{
VelocityEngine ve = new VelocityEngine();
Properties p = new Properties();
p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, "E:/opensource/workspace/source/volicity/com/vm");
ve.init(p);
Template t = ve.getTemplate("temp.vm");
VelocityContext context = new VelocityContext();
context.put("nn","我靠,中文呢?");
StringWriter writer = new StringWriter();
t.merge(context,writer);
FileOutputStream out = new FileOutputStream(new File("E:/T.java"));
out.write(writer.toString().getBytes());
System.out.print(writer.toString());
out.close();
}
但是问题又出现了
输出结果是 hello 我靠,中文呢? world!!
但是输出到文件里面的却是
到这里我们该明白一点了。这是写文件的输出流那里编码出了问题。
我们可以通过设定output.encoding=gbk 来解决。
问题二:
在我们用Velocity生成一些文本文件,但是这些文本文件里面存放的是xml格式的字符串
例如temp.vm的代码是
<?xml version="1.0" encoding="UTF-8"?>
<wpc:description>${chinese}</wpc:description>
我们的main函数是
代码:
publicstaticvoid main( String args[] ) throws Throwable{
VelocityEngine ve = new VelocityEngine();
Properties p = new Properties();
p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, "E:/opensource/workspace/source/volicity/com/vm");
ve.init(p);
Template t = ve.getTemplate("temp.vm");
VelocityContext context = new VelocityContext();
context.put("chinease","我靠,中文呢?");
StringWriter writer = new StringWriter();
t.merge(context,writer);
FileOutputStream out = new FileOutputStream(new File("E:/T.java"));
out.write(writer.toString().getBytes());
System.out.print(writer.toString());
out.close();
}
但是问题又出现了
输出结果是
<?xml version="1.0" encoding="UTF-8"?>
<wpc:description>??????</wpc:description>
这里我们把属性文件
input.encoding = gbk
output.encoding=gbk 设置为这样,但是呢?结果如故,还是没有解决。
无论input.encoding = UTF-8 output.encoding=UTF-8 还是什么别的,还是乱码。
这个问题是网上很多人遇到的,在整合spring或者什么别的开源软件的时候,遇到xml格式的文件的时候遇到这样的乱码问题。
但是我们把模板文件改为这样
<wpc:description>${chinese}</wpc:description>
去掉了头一行
<?xml version="1.0" encoding="UTF-8"?>
输出结果正常了。呵呵,很奇妙噢。大家是不是发现了什么呢?这里的这行
<?xml version="1.0" encoding="UTF-8"?>
是罪魁祸首。
在控制台输出的是中文,因为模板有了这行,文件代码却乱了。
呵呵,到这里,我们似乎找到了解决办法。问题出在我们写文件的流上面。
我们现在用另外的PrintStream流来写文件吧。这样输出的编码格式可以搞定啦。
代码如下:
publicstaticvoid main( String args[] ) throws Throwable{
VelocityEngine ve = new VelocityEngine();
Properties p = new Properties();
p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, "E:/opensource/workspace/source/volicity/com/vm");
ve.init(p);
Template t = ve.getTemplate("temp.vm");
VelocityContext context = new VelocityContext();
context.put("TableBeans","我靠,中文呢?");
StringWriter writer = new StringWriter();
t.merge(context,writer);
FileOutputStream fos = new FileOutputStream(new File("E:/x.java"));
PrintStream ps = new PrintStream(fos, true, "UTF-8");//这里我们就可以设置编码了
ps.print(writer.toString());
ps.flush();
ps.close();
fos.close();
}
这下我们看一下输出的x.java文件,呵呵,OK了,原来病因就是那个第一行
<?xml version="1.0" encoding="UTF-8"?>
这里其实就是强制了文件的类型了。
告诉大家一个设置代码属性的捷径,可以省去velocity.properties文件。呵呵,这样就简单好用了。
Properties p = new Properties();
p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, "E:/opensource/workspace/source/volicity/com/vm");
p.setProperty(Velocity.INPUT_ENCODING, "GBK");
p.setProperty(Velocity.OUTPUT_ENCODING, "GBK");
ve.init(p);
这样设置属性就更方便啦。
如果转载,请标明出处,作者
分享到:
相关推荐
解决页面乱码问题的关键在于确保整个应用链路中的字符编码一致。通过正确配置项目、服务器、模板、sitemesh和HTTP响应头,我们可以有效地避免乱码问题,实现流畅的页面装饰效果。对于`VelocityView.java`的具体功能...
在使用Velocity时,可能会遇到一些常见的问题,如“无法加载资源'hello.vm'”以及中文乱码问题,下面将详细解释这两个问题的成因及解决方法。 首先,"unable to find resource 'hello.vm' in any resource loader...
根据提供的标题、描述、标签及部分内容,我们可以了解到这段资料主要涉及的是Velocity模板引擎在.NET环境下的使用,并且特别提到了如何解决中文字符显示时出现的乱码问题。下面将对这些知识点进行详细的解读。 ### ...
需要注意的是解决乱码问题#需要指定下编码格式spring.velocity.properties.input.encoding=UTF-8spring.velocity.properties.output.encoding=UTF-8#部分文件说明VM_global_library.vm vm的全局定义函数,参数再这里...
1. 在 Velocity 模板中使用中文时,需要注意中文乱码的问题,通常可以在 VM 文件中使用%{getText(‘’)}调用国际化资源文件的内容来避免乱码。 2. Velocity 模板文件必须经过 Action 才可以访问,以便被程序解析,不...
总结来说,解决HTML超链接中文乱码的关键在于使用`URLEncoder.encode()`方法时指定正确的字符集,并在前端和后端保持一致。此外,理解URL编码的原理以及HTTP协议对URL的限制也是非常重要的,这样才能确保数据在传输...
如果上述步骤都无法解决问题,可能需要深入源码,查看Hibernate Tools在处理Comment时的具体编码逻辑。在源码中找到处理Comment的代码段,检查是否正确使用了UTF-8编码进行转换。如果有必要,可以考虑创建一个补丁并...
.net velocity 模板引擎 用于vistual studio 下的模板开发
然而,在实际开发过程中,我们可能会遇到一些问题,比如在处理`hbm.xml`文件中的中文注释时出现乱码,或者希望自动生成的实体类中包含有详细的注释。本文将详细介绍如何利用`Hibernate-tools`来解决这些问题,以`...
本示例将深入探讨如何使用Spring发送电子邮件,特别是针对中文乱码问题的解决方案。我们将涉及Spring的Java配置和Velocity模板引擎来创建动态邮件内容。 首先,我们需要引入必要的依赖。在Spring项目中,我们通常会...
2. **reportng-1.1.4.jar**:这个是ReportNG的核心库文件,修复了中文乱码问题。这意味着在运行测试并生成报告时,即使测试用例或报告内容包含中文字符,也能够正确显示,避免了字符编码不匹配导致的乱码现象。...
`ActionContextCleanUp`过滤器是Struts2的一部分,它用于清理ActionContext,确保每次HTTP请求都有一个干净的上下文环境,防止上一次请求的数据影响当前请求,同时有助于解决乱码问题。 6. 其他表达式语言: ...
然而,在生成PDF文档时,如果涉及到中文内容,可能会遇到显示乱码或者不支持的问题。本文将深入探讨如何解决Maven站点生成PDF时的中文支持问题。 首先,我们需要理解Maven生成站点的流程。Maven站点插件(maven-...
6. **总结分析Web开发中的各种字符乱码问题**:在Web应用中,字符编码问题经常出现,尤其是涉及多语言环境时。确保HTTP头、HTML页面、表单提交以及数据库存储的编码一致是解决乱码的关键。 这些知识点都是Java Web...
- 使用相对路径可能导致在不同部署环境下的路径问题,合理规划项目结构和使用服务器配置可以帮助解决这类问题。 5. **配置相同页眉和页脚的技巧**: - 可以通过模板引擎(如FreeMarker、Velocity)或者包含指令...
reportNg报告所需用到的jar包(guice-3.0.jar+java-client-2.1.0.jar+reportng-1.1.4.jar+velocity-1.7.jar) ,其中report.jar是已经修复好中英文乱码问题了
该文章可能介绍了如何正确设置JSP页面的编码,以确保中文字符能正确显示,避免乱码问题,同时可能还讨论了如何在JSP中使用Unicode或其他编码方式来支持中文内容。 **3. Velocity与JSP技术在portlet开发中的研究及...