Saya mengembangkan berdasarkan Eclipse3.2+j2ee5.0 +Tomcat5.09+mysql5.0.
Pertama, data kacau berbahasa Mandarin dalam bentuk POST dapat diselesaikan.
Jenis data berbahasa Mandarin ini dapat disaring secara real time melalui filter. Kode filternya adalah sebagai berikut:
filter paket;
import java.io.IOException;
impor javax.servlet.Filter;
impor javax.servlet.FilterChain;
impor javax.servlet.FilterConfig;
impor javax.servlet.ServletException;
impor javax.servlet.ServletRequest;
impor javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
kelas publik SetCharacterEncodingFilter mengimplementasikan Filter ...{
pengkodean String yang dilindungi = null;
FilterConfig dilindungi filterConfig = null;
boolean yang dilindungi abaikan = true;
public void destroy() ...{
ini.pengkodean = null;
ini.filterConfig = null;
}
public void doFilter(Permintaan ServletRequest, respons ServletResponse,
Rantai FilterChain)
throws IOException, ServletException ...{
// Pilih dan atur pengkodean karakter yang akan digunakan secara kondisional
if (abaikan || (request.getCharacterEncoding() == null)) ...{
Pengkodean string = selectEncoding(permintaan);
jika (pengkodean != null)
permintaan.setCharacterEncoding(pengkodean);
}
// Meneruskan kontrol ke filter berikutnya
chain.doFilter(permintaan, respons);
}
public void init(FilterConfig filterConfig) melempar ServletException ...{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
Nilai string = filterConfig.getInitParameter("abaikan");
jika (nilai == nol)
this.abaikan = benar;
else if (nilai.equalsIgnoreCase("benar"))
this.abaikan = benar;
else if (nilai.equalsIgnoreCase("ya"))
this.abaikan = benar;
kalau tidak
this.ignore = false;
}
String yang dilindungi selectEncoding (permintaan ServletRequest) ...{
return (ini.encoding);
}
}
konfigurasi filter (konfigurasi web.xml):
<menyaring>
<nama-filter>Atur Pengkodean Karakter</nama-filter>
<kelas filter>filters.SetCharacterEncodingFilter</kelas filter>
<init-param>
<nama-param>pengkodean</nama-param>
<nilai-param>GBK</nilai-param>
</init-param>
</filter>
<pemetaan filter>
<nama-filter>Atur Pengkodean Karakter</nama-filter>
<pola-url>/*</pola-url>
</pemetaan filter>
2. Masalah karakter yang kacau saat menyimpan data berbahasa Mandarin ke dalam database
diambil sebagai contoh di mysql. Tulis ulang saja string koneksi:
jdbc:mysql://localhost:3306/workshopdb?
3. Masalah dalam meneruskan parameter melalui URL dan mengidentifikasi nama file berbahasa Mandarin
. Gejala masalah: 1. Melewati parameter melalui URL, misalnya:
http://localhost:81/crjy/admin/articlelist.jsp?levelId=64&levelName =Student Gedung Partai
Nilai yang diperoleh melalui request.getParameter("levleName") adalah Ranma.
2. Kenali nama file berbahasa Mandarin, misalnya:
<img src="./pic/Sichuan Map.jpg"> Gambar tidak dapat ditampilkan.
Solusi:
1. Jika Anda hanya ingin menyelesaikan masalah pertama, caranya sangat sederhana. Hanya dua baris kode:
String role=request.getParameter("chara");
peran=String baru(role.getBytes("ISO-8859-1"),"GB2312");
out.println(peran);
Karena server Tomcat menggunakan set karakter ISO-8859-1 secara default. Tapi ini hanya bisa menyelesaikan masalah pertama tetapi bukan masalah nama file berbahasa Mandarin.
2. Selesaikan kedua masalah bersama-sama. Ubah server.xml, temukan pernyataan berikut dan tambahkan URIEncoding="GB18030", sehingga kedua masalah tersebut diselesaikan bersama ( tidak diperlukan peran) =String baru(role.getBytes("ISO-8859-1"),"GB2312")
; 0"disableUploadTimeout="benar" aktifkanLookups="false" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="81" redirectPort="8443"/>
Selain itu, banyak artikel memperkenalkan bahwa Anda dapat menambahkan URIEncoding="UTF-8", yang dapat menyelesaikan masalah nama file berbahasa Mandarin, tetapi ketika Anda mendapatkan parameter yang diteruskan oleh url melalui String role=request.getParameter("chara"); , Anda mendapatkan UTF-8 Encoded, itu perlu dikonversi ke GB2312 yang merepotkan.
Di atas adalah ringkasan penggunaan saya. Saya harap semua orang dapat memberikan pendapat yang berharga.
http://blog.csdn.net/lijiuu/archive/2007/02/25/1514354.aspx