springmvc controllerとservlet中国語の文字化け問題
3364 ワード
一、第一の方法はtomcat配置とspring符号化フィルタによって中国語の文字化けを解決する。
1、tomcatプロファイルserver.xmlを変更する
二番目の方法。上の配置を使って問題を解決できます。ただし、springmvcを使用していないと、エンコードフィルタが使えなくなり、それぞれrequestとレスポンスが処理されます。
servletあるいはspringmvcのrequestとreponseの文字化けの問題
1、requestはurlを使って中国語パラメータ(http getなど)の文字化け問題を伝えます。
2、レスポンス 中国語文字列の文字化けを出力します。
第一の方法:
まとめ:
1.servletで中国語を出力し、PrintWriter方式を採用するなら、get PrintWriter()を呼び出す前にsetContentTypeまたはset CharcterEncocdingを呼び出す必要があります。ServletOutputStream方式を採用していますが、この限りではありません。
2.setContentTypeとset CharcterEnccodingの2つの方法において、characterEnccodingを設定する方法はサーバの効果に一致しています。繰り返し起動する必要はありません。テキストの内容を出力する時は、レスポンス-set ContentType(「text/html」、charset=utf-8)を採用します。もっと便利そうです。
3.PrintWriter自身は符号化の職責を処理していません。それはやはり装飾器として見たほうがいいと思います。それは出力が便利であるために設計されたものです。print、printel、printなどの便利な方法を提供します。コードを設定するなら、その下のWriterにセットしてもいいです。
new PrintWriter(new Output Stream Writer(new FileOutputStream(「yourfilepath」)、 「UTF-8」)
1、tomcatプロファイルserver.xmlを変更する
tomcat conf/server.xml
:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
Tomcat HTTP 。
:URIEncoding, UTF-8, Tomcat( ISO-8859-1 ) UTF-8 get 。
:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
2、spring符号化フィルタは、web.xmlに符号化フィルタを配置する。<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>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
二番目の方法。上の配置を使って問題を解決できます。ただし、springmvcを使用していないと、エンコードフィルタが使えなくなり、それぞれrequestとレスポンスが処理されます。
servletあるいはspringmvcのrequestとreponseの文字化けの問題
1、requestはurlを使って中国語パラメータ(http getなど)の文字化け問題を伝えます。
//1、type , 。 tomcat iso-8859-1 , 。
String type = request.getParameter(Params.TYPE);
//2、 type utf8 : iso-88590-1 utf-8
res = new String(type.getBytes("iso-8859-1"),"UTF-8");
2、レスポンス 中国語文字列の文字化けを出力します。
第一の方法:
//getWriter() iso-8859-1, utf8
PrintWriter pw = response.getWriter();
//1、
//response.setCharacterEncoding("UTF-8");
//2、
response.setContentType("text/html; charset=utf-8");
pw.write(resStr);
pw.flush();
pw.close();
setContentType setCharacterEncoding characterEncoding , 。 , response.setContentType("text/html; charset=utf-8"); 。
第二の方法: PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(), "UTF-8"));
まとめ:
1.servletで中国語を出力し、PrintWriter方式を採用するなら、get PrintWriter()を呼び出す前にsetContentTypeまたはset CharcterEncocdingを呼び出す必要があります。ServletOutputStream方式を採用していますが、この限りではありません。
2.setContentTypeとset CharcterEnccodingの2つの方法において、characterEnccodingを設定する方法はサーバの効果に一致しています。繰り返し起動する必要はありません。テキストの内容を出力する時は、レスポンス-set ContentType(「text/html」、charset=utf-8)を採用します。もっと便利そうです。
3.PrintWriter自身は符号化の職責を処理していません。それはやはり装飾器として見たほうがいいと思います。それは出力が便利であるために設計されたものです。print、printel、printなどの便利な方法を提供します。コードを設定するなら、その下のWriterにセットしてもいいです。
new PrintWriter(new Output Stream Writer(new FileOutputStream(「yourfilepath」)、 「UTF-8」)