这是不是可以使用 thymeleaf 和 spring 以 utf-8 编码将 html 代码注入 html 页面
Posted
技术标签:
【中文标题】这是不是可以使用 thymeleaf 和 spring 以 utf-8 编码将 html 代码注入 html 页面【英文标题】:Is this possible to inject html code in utf-8 encoding to html page using thymeleaf and spring这是否可以使用 thymeleaf 和 spring 以 utf-8 编码将 html 代码注入 html 页面 【发布时间】:2020-12-27 01:58:50 【问题描述】:最近我决定尝试使用 Spring MVC 学习 Thymeleaf。目前我正在存储 html 正文片段,例如 img、iframe 等。在使用带有 UTF-8 编码和西里尔符号的 thymeleaf 标签将这些 html 片段注入一个通用 html 页面后,问题就出现了。更准确地说,这些 html 片段来自 Spring 控制器的 Model 属性。是否可以仅将片段注入到一个通用 html 页面中,如下所示:
<html xmlns:th="https://www.thymeleaf.org">
<head></head>
<body>
[($contents)] <!-- contents is that fragment I want to inject -->
</body>
</html>
Controller的请求方法如下图:
@GetMapping("/getArticle/id")
public String getArticle(@PathVariable Long id, Model model) throws IOException
Article article = articleService.getById(id);
String contents = new String(Files.readAllBytes(Paths.get(article.getText())));
model.addAttribute("contents", contents);
return "news//article";
内容插入片段示例:
<h1>Кириллица</h1>
<br/><iframe style='width: 30%; height: 35%;' src='link'></iframe><br/>
Классный видос, да?
The result of combining 2 previous lists gives me this
正如我之前提到的,我遇到了一些问题,我有一些曲线符号而不是俄罗斯符号。另外,我应该注意,在没有注入的正常页面加载的情况下,所有的俄语符号都会正确显示。 Spring 配置中有我的 ViewResolver 和 TemplateResolver:
@Bean
public SpringResourceTemplateResolver templateResolver()
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setApplicationContext(applicationContext);
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setCacheable(true);
return templateResolver;
@Bean
public ThymeleafViewResolver viewResolver()
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setCharacterEncoding("UTF-8");
thymeleafViewResolver.setContentType("text/html; charset=UTF-8");
return thymeleafViewResolver;
那么,接下来的问题是:这是否可以直接注入从控制器接收的 html 代码作为属性,使用具有正确 UTF-8 编码且不带曲线符号的 thymeleaf 标签?
【问题讨论】:
【参考方案1】:你可以这样做,但你至少需要改变这一行:
String contents = new String(Files.readAllBytes(Paths.get(article.getText())));
到这里:
String contents = Files.readString(Paths.get(article.getText()), StandardCharsets.UTF_8);
这使用带有java.nio.charset.StandardCharsets.UTF_8
字符集的readString()
方法。否则,来自readAllBytes()
的字节将被写入一个可能是其他(非 UTF-8)编码的字符串 - 可能取决于 JVM 在启动时拾取的默认字符集。
但是,为了学习 Thymeleaf,我建议您查看 Thymeleaf fragments(如果您还没有这样做的话),因为这些都是为此目的而设计的。
这将引导您进入template layouts,它具有很大的灵活性。
【讨论】:
非常感谢。问题是我在读取文件时没有设置 UTF-8 编码。可能,我应该尝试调试应用程序,但我有点懒惰,认为模板视图存在一些问题,但我的 Java 代码没有。另外,谢谢你的建议,学习百里香的布局和片段,我显然必须学习它)以上是关于这是不是可以使用 thymeleaf 和 spring 以 utf-8 编码将 html 代码注入 html 页面的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot + MyBatis + Thymeleaf实现简单留言板应用
Spring Boot + MyBatis + Thymeleaf实现简单留言板应用
(Spring,Thymeleaf)如何使用模型内的模型列表向控制器“POST”请求?