首页 > 解决方案 > Spring Boot 2.0.5 版的 Liquid 模板编码问题

问题描述

我正在使用 Spring Boot 2.0.5 版。和液体模板版本 0.7.8

我的问题是,当我在模板文件中使用德语文本并且发送邮件时,很少有德语字符转换成 ? 标记。

那么解决这个问题的方法是什么?

标签: spring-bootliquid

解决方案


沿着文本文件模板的路径某处,通过处理和作为电子邮件发送,字符编码被破坏,因此以一种方案编码的德语字符在另一种方案中被错误地呈现为错误的“字形” ,在电子邮件中。

首先要检查的是模板文件的编码是什么。然后调查电子邮件是如何呈现的。例如,如果它是 HTML 电子邮件,请查看标头中是否存在具有不同编码的字符编码引用,例如:

<head><meta charset="utf-8" /></head>

如果这与文件的编码不同,例如 ISO-8859-1,那么我会尝试的第一件事是将模板重新保存为 UTF-8,您应该能够在大多数 IDE 或高级文本编辑器中执行此操作,例如记事本++

(由于字形是问号,因此模板可能是 UTF-8 或 UTF-16,而 HTML 的字符集更有限。)

如果这不起作用,那么您可能需要查看您的代码并注意模板中的原始字节如何转换为字符串。例如:

String template = new String(bytesFromFile);

将使用系统默认字符集,这可能与文件不同。将字节转换为字符串的安全方法是指定字符集:

String template = new String(bytesFromFile, "UTF-8");

推荐阅读