java - 形成丢失的波兰字符

标签 java mysql spring character-encoding thymeleaf

我在尝试向我的 MySQL 数据库中添加波兰语字符(例如“ą, ę, ć, ł”等)时失去了理智。我完成的步骤:

  1. 将“方法比较铭文”设置为utf8_unicode_ci在我的 MySQL 数据库中。
  2. 为所有 varchar 设置字段 Method comparing inscriptionutf8_unicode_ci
  3. application.properties设置:
spring.datasource.url: jdbc:mysql://localhost:3306/database?characterEncoding=UTF-8
spring.mandatory-file-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
spring.datasource.sqlScriptEncoding=UTF-8
  1. 为了确保在所有 HTML 文件中添加 <head></head>括号 <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
  2. 像这样设置配置文件:
@Configuration
public class Config extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        filter.setForceEncoding(true);
    }
}

当我尝试在我的 Controller 中添加一些波兰语单词时,例如 player.setName("ĆŁĘ") - 没关系。正确插入数据库中的名称。

但是当我使用 name来自 Thymeleaf 的 Controller 中的播放器,它返回 ÄÅÄ而不是 CŁĘ .我的表格服务员 Thymeleaf 看起来像这样:

<form action="#" th:action="@{/editPlayer}" th:object="${player}" method="post">
    <div class="info">Name:</div>
    <div class="error" th:if="${#fields.hasErrors('name')}" th:errors="*{name}"/>
    <input type="text" th:field="*{name}" placeholder="Name" th:class="${#fields.hasErrors('name')}? 'error'"/><br/>

    <input type="button" id="cancel" class="button2 button-cancel" value="CANCEL"/>
    <input type="submit" class="button button-submit" value="SUBMIT"/>
</form>

我不知道我还需要做什么才能从 Thymeleaf 获取正确的字符。

最佳答案

我找到了解决方案。它需要我采取一些步骤:

  1. 将注释 @EnableWebSecurity 添加到我的 Config 类,
  2. filter.setForceEncoding(true)下编写http.addFilterBefore(filter, CsrfFilter.class)
  3. 创建类ApplicationSecurityInitializer
public class ApplicationSecurityInitializer extends AbstractSecurityWebApplicationInitializer {

    @Override
    protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
        super.beforeSpringSecurityFilterChain(servletContext);
        FilterRegistration.Dynamic characterEncodingFilter;
        characterEncodingFilter = servletContext.addFilter("encodingFilter",
                new CharacterEncodingFilter());
        characterEncodingFilter.setInitParameter("encoding", "UTF-8");
        characterEncodingFilter.setInitParameter("forceEncoding", "true");
        characterEncodingFilter.addMappingForUrlPatterns(null, false, "/*");
    }
}
  1. 深吸一口气,保持冷静 :)

关于java - 形成丢失的波兰字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34948451/

相关文章:

database - Spring boot - 数据库更改在作业完成之前不会反射(reflect)出来

java - 如何在JSP页面的开头重用相同的代码块?

java - grails中转换日期错误

javascript - 如何将 Javascript 日期转换为 Spring @RequestParam 的 LocalDate?

mysql - 我的 MySQL 转储的导入还有多长时间?

MySQL添加分数列到SELECT高分查询

java - 实现一个行为类似于 nginx 的 Undertow 反向代理

java - Spring 4 MVC 区域设置已更改,但 JSP 对此没有响应

java - 在玩家身后创建一条血迹

java - Jar无法从jar文件内部读取音频文件