How to Ensure UTF-8 Encoding in Java Web Applications
To enable UTF-8 encoding in your Java webapp, follow these steps:
1. Configure Tomcat's server.xml
Add the following line to enable UTF-8 encoding for URL (GET request) parameters:
<Connector port="8080" ... URIEncoding="UTF-8" ... />
2. Implement a Character Set Filter
Define a filter to force the webapp to handle all requests and responses as UTF-8 encoded:
import javax.servlet.*; public class CharsetFilter implements Filter { private String encoding = "UTF-8"; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain next) throws ServletException, IOException { request.setCharacterEncoding(encoding); response.setContentType("text/html; charset=UTF-8"); response.setCharacterEncoding("UTF-8"); next.doFilter(request, response); } }
3. Add the Filter to web.xml
Register the filter in the deployment descriptor:
<filter> <filter-name>CharsetFilter</filter-name> <filter-class>fi.foo.filters.CharsetFilter</filter-class> </filter> <filter-mapping> <filter-name>CharsetFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
4. Set JSP Page Encoding
Specify the page encoding in web.xml:
<jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <page-encoding>UTF-8</page-encoding> </jsp-property-group> </jsp-config>
5. Use HTML-Meta Tags
Indicate the encoding used by HTML pages:
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
6. Configure JDBC Connection
Specify UTF-8 encoding for the database connection:
<Resource ... url="jdbc:mysql://localhost:3306/ID_development?useEncoding=true&amp;characterEncoding=UTF-8" ... />
7. Create Tables with UTF-8 Collation
Ensure that all database tables have UTF-8 collation:
CREATE TABLE `Users` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(30) collate utf8_swedish_ci default NULL PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci ROW_FORMAT=DYNAMIC;
8. Check MySQL Server Configuration
Verify that the server is configured to use UTF-8 as the default character set:
[client] default-character-set=utf8 [mysql] default-character-set=utf8
Note:
While Cyrillic characters like "ж" can be handled through GET requests with UTF-8 encoding, characters like "ä" may be encoded in Latin1 (ISO-8859-1), causing inconsistencies.
The above is the detailed content of How to Guarantee UTF-8 Encoding Throughout a Java Web Application?. For more information, please follow other related articles on the PHP Chinese website!