我在尝试向我的 MySQL 数据库中添加波兰语字符(例如“ą, ę, ć, ł”等)时失去了理智。我完成的步骤:
- 将“方法比较铭文”设置为
utf8_unicode_ci
在我的 MySQL 数据库中。 - 为所有
varchar
设置字段Method comparing inscription
至utf8_unicode_ci
- 在
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
- 为了确保在所有 HTML 文件中添加
<head></head>
括号<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
- 像这样设置配置文件:
@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 获取正确的字符。
最佳答案
我找到了解决方案。它需要我采取一些步骤:
- 将注释
@EnableWebSecurity
添加到我的Config
类, - 在
filter.setForceEncoding(true)
下编写http.addFilterBefore(filter, CsrfFilter.class)
- 创建类
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, "/*");
}
}
- 深吸一口气,保持冷静 :)
关于java - 形成丢失的波兰字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34948451/