1. 程式人生 > >Tomcat5.5 UTF-8 亂碼問題解決辦法

Tomcat5.5 UTF-8 亂碼問題解決辦法

[size=medium]參考網址:
[url]http://blackwoodkane.spaces.live.com/Blog/cns!6279FA186F838628!649.entry[/url]
[url]http://www.javaworld.com.tw/jute/post/view?bid=9&id=44042&sty=1&tpg=1&age=0[/url][/size]


[size=medium]首先要需要了解的是web容器預設編碼是iso-8859-1,一個漢字佔用兩個位元組,而在utf-8中一個漢字佔用三個位元組。所以在資料傳遞過程中,必須手動設定容器編碼格式,否則會出現字元位丟失的情況。即3個位元組變為兩個位元組,自然會變成亂碼。

第一步,修改tomcat。
找到對應站點的server.xml後,在裡面的Connector標籤裡面新增
useBodyEncodingForURI="true"
這句的話告訴tomcat用頁面的編碼去處理post

在JSP頁面加上這兩句
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">[/size]

[size=medium]例子:
DirRead.jsp[/size]

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.net.*,java.io.*" %>

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<%

//依您電腦,請修改目錄
File fp = new File("C:\\");
File[] f2 = fp.listFiles();
%>
<form method="post">
<table border="01" cellpadding="2" cellspacing="0">
<% //for( int i=0 ; i<file_list.length ; i++ ){
for( int i=0 ; i<f2.length ; i++ ){
%>
<tr>
<td><%=f2[i].getName() %></td>
<td><a href="DirShow.jsp?filename=<%= java.net.URLEncoder.encode(f2[i].getName(),"UTF-8") %>">link</a></td>
</tr>
<% } %>
</table>
</form>
</BODY>
</HTML>


[size=medium]DirShow.jsp[/size]

<%@page contentType="text/html; charset=UTF-8" %>
<%@page import="java.util.*" %>
<%@page import="java.io.*" %>

<%
request.setCharacterEncoding("UTF-8");
String filename = request.getParameter("filename");
out.println("選取檔案: " + filename);
%>