简介
UTF-8是网页应用中最常用的字符编码。它支持世界上正在使用的所有语言,包括中日韩。
本文我们会展示所有的配置以确保在Tomcat中使用 UTF-8。
连接器(Connector) 配置
一个连接器在指定的端口上监听连接。我们需要确保我们所有的连接器都使用UTF-8来编码请求。 给TOMCAT_ROOT/conf/server.xml里的所有的连接器添加一个参数 URIEncoding=”UTF-8″ 。
1 2 3 4 5 |
<Connector URIEncoding="UTF-8" port="8080" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/> <Connector URIEncoding="UTF-8" port="8009" redirectPort="8443" protocol="AJP/1.3"/> |
字符集过滤器
配置过连接器之后, 我们该强制网页程序使用UTF-8去处理所有的请求与响应。
如果我们在使用Spring,直接注册CharacterEncodingFilter到web.xml中, 同时要确保该过滤器是web.xml中的第一个过滤器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
不然的话就需要自己定义一个CharacterSetFilter的类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class CharacterSetFilter implements Filter { // ... public void doFilter( ServletRequest request, ServletResponse response, FilterChain next) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); response.setCharacterEncoding("UTF-8"); next.doFilter(request, response); } // ... } |
然后我们把这个过滤器添加到web.xml里:
1 2 3 4 5 6 7 8 9 10 |
<filter> <filter-name>CharacterSetFilter</filter-name> <filter-class>com.baeldung.CharacterSetFilter</filter-class> </filter> <filter-mapping> <filter-name>CharacterSetFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
Servlet 页编码
我们的网页程序另一部分需要配置的是Servlet 页。
确保Servlet使用UTF-8的最好方法是添加这个标签到每个JSP页的最头部:
1 2 |
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> |
HTML页编码
Servlet页编码是告诉JVM如何处理字符,HTML页编码是告诉浏览器如何处理字符。
我们应该添加这个标签 到所有HTML的 head 区域。
1 2 |
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' /> |
参考链接:
最新评论
昨天发现的,然后在application.yml中配置“hibernate.dialect.storage_engine=innodb”。但是自动生成的表还是不会设置为innoDB,看了底层源码。这个配置也是没有加载到的 原来是要在hibernate.properties中加这个配置。感谢
将virtualbox虚拟网卡驱动卸载了,然后就会好了,但是这个时候virtualbox虚拟网络就无法使用了,重新安装一下virtualbox就好了
我也发现了这个注释:注释“Use "hibernate.dialect.storage_engine=innodb" environment variable or JVM system property instead.” ----- 坑啊。。。。。。。
卸载蓝牙驱动·在设备里面找,一般在网卡那里 卸载重启就行了
高