我有一个index.html文件:
<!doctype html>
<html lang="fr" class="no-js fontawesome-i2svg-active fontawesome-i2svg-complete">
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
<title>Annuaire Téléphonique</title>
...
和我将它部署到一个war中,由Tomcat 9.0.35提供服务。问题是,在浏览器中,重音是这样的:"Annuaire Téléphonique">
我发现Tomcat服务的内容类型为false:
- curl -v http://127.0.0.1:10000/->的content - type: text/html; charset = iso - 8859 - 1
Tomcat配置的每个部分都配置为UTF-8。我的Linux bash定义LANG=UTF-8, Tomcat以-Dfile.encoding=UTF-8
启动我还发现,当询问表单index.html时,tomcat没有指定编码,这对我来说是完美的,因为index.html本身包含UTF-8的Content-Type元数据,浏览器正确显示口音
- curl -v http://127.0.0.1:10000/index.html ->的content - type: text/html
问题是:
- 为什么index.html作为欢迎文件(http://127.0.0.1:10000/)使用ISO-8859-1 ?
- 如何作为UTF-8 ?(AddDefaultCharsetFilter UTF-8没有帮助)
谢谢你的帮助
当我公开一个Spring应用程序时,我找到了一个有效的解决方案,具有以下属性
spring.http.encoding.charset = utf - 8spring.http.encoding.force-response = true
这种行为对我来说还是很奇怪……
我也遇到了同样的问题:
直接访问url:
- example.com/index.html(编码可以)
- example.com/(编码错误)->text/html; charset = iso - 8859 - 1
我也在用spring-boot。
spring.http.encoding。charset=UTF-8不适合我。
这是我的解决方案:)
@Component
public class CustomFilter implements Filter
{
@Override
public void init(FilterConfig filterConfig) throws ServletException
{
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
if (request instanceof HttpServletRequest)
{
String servletPath = ((HttpServletRequest) request).getServletPath();
if (servletPath.equals("/")) {
// do not let tomcat assign text/html;charset=ISO-8859-1
response.setContentType("text/html; charset=UTF-8");
}
}
chain.doFilter(request, response);
}
}