Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
597 views
in Technique[技术] by (71.8m points)

tomcat8 - How to set tomcat 8 container character encoding of request and response to UTF-8 intead of ISO-8859-1

We need to set tomcat 8 container character encoding of request and response to UTF-8 intead of ISO-8859-1 , What is the setting for the same We tried setting as mentioned below , https://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q1

But that requires creating filter etc. Is there any elegant way where we can just change some configuration set to make it applicable at container level

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Tomcat 8+ comes bundled with a filter to set the character encoding.

This is described in Tomcat 8 Container Provided Filters.

This filter needs to be configured in your web.xml file plus a few other changes as below.

The following configuration works for

  • Tomcat 8.0.30
  • jdk1.8.0_66
  • SQL Server 2008 R2
  • Microsoft JDBC driver (sqljdbc42.jar)

Character Encoding Filter

web.xml

<filter>
  <filter-name>setCharacterEncodingFilter</filter-name>
  <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
</filter>

<filter-mapping>
  <filter-name>setCharacterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

JSP Page Encoding

web.xml

<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <page-encoding>UTF-8</page-encoding>
  </jsp-property-group>
</jsp-config>

JSP Page Creation

Only standard English characters should be used ie no accented characters etc

Database Character Types

All character types for table columns should be Unicode types eg NCHAR, NVARCHAR & NTEXT.

Database Connection String

For a SQL Server 2008 R2 database with collation 'Latin1_General_CI_AS', it seems that the connection string does not need to be set to use UTF-8.

context.xml

 <Resource name="jdbc/gtraxDS" auth="Container"
           type="javax.sql.DataSource"  
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
            url="jdbc:sqlserver://ctceu-wgc-dv026:45666; databaseName=gtraxd2"
       username="myAppUsername"
       password="myAppPa55word"/>

Strict Servlet compliance

Do not set 'strict servlet compliance'.

From the Tomcat 8 Migration Guide

The default value of URIEncoding attribute for HTTP and AJP connectors has been changed from
"ISO-8859-1" to be "UTF-8" (if "strict servlet compliance" mode is off, which is the default)

File System Character Encoding

Iterating & displaying contents of:

System.getProperties();

gives:

...
file.encoding       Cp1252
file.encoding.pkg   sun.io
...

It seems that the file encoding does not need to be changed


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...