0

我正在开发一个包含 Hibernate、JPA、Spring 的应用程序。

我有一个在流程结束时使用 Freemarker 发送电子邮件的流程。

免费标记模板中的数据是从数据库中填充的。数据在数据库中有一个英镑符号,但是当 freemarker 处理它时,它被转换成?象征。

代码如下

final StringWriter writer = new StringWriter();
Template template= freemarkerConfiguration.getTemplate("sampleReport.ftl");
template.process(this, writer);
System.out.println(writer.toString());

打印从数据库中检索到的数据,结果如下

INFO  05-22 10:08:18 Printing ?-- Hex :a3  

a3 - 是磅符号的十六进制代码,但它的打印?也是。

我无法发现错误

4

1 回答 1

0

FreeMarker 可以在任何地方使用 UNICODE,因此它本身不会生成?-s。打印它的字符代码String而不是它String本身,并查看它是否已经包含 0x3F(的 UCS 代码?)。如果不是,则System.out.println说明使用了错误的编码,并且任何对电子邮件进行编码以供发送的内容也是如此。如果它确实包含 0x3F,则可能是那里的 JDBC 出现了问题(同样,您可以通过打印字符代码来检查来自 JDBC 的字符串),因此 FreeMarker 已经收到了?.

于 2012-05-21T17:40:33.540 回答