JSP perlu "dikodekan" dua kali. Tahap pertama akan menggunakan pageEncoding, tahap kedua akan menggunakan utf-8 hingga utf-8, dan tahap ketiga adalah halaman web yang dihasilkan oleh Tomcat, menggunakan contentType.
Mengenai perbedaan antara atribut pageEncoding dan contentType di halaman JSP:
pageEncoding adalah pengkodean file jsp itu sendiri
Rangkaian karakter contentType mengacu pada pengkodean konten saat server mengirimkannya ke klien.
JSP perlu "dikodekan" dua kali. Tahap pertama akan menggunakan pageEncoding, tahap kedua akan menggunakan utf-8 hingga utf-8, dan tahap ketiga adalah halaman web yang dihasilkan oleh Tomcat, menggunakan contentType.
Tahap pertama adalah mengkompilasi jsp menjadi .java. Ini akan membaca jsp sesuai dengan pengaturan pageEncoding. Hasilnya adalah skema pengkodean yang ditentukan diterjemahkan ke dalam kode sumber UTF-8 JAVA terpadu (yaitu .java). settingnya salah, Atau tidak ada setting, dan yang keluar adalah karakter Cina yang kacau.
Tahap kedua adalah kompilasi dari kode sumber JAVA JAVAC ke byteCode java. Tidak peduli skema pengkodean apa yang digunakan saat menulis JSP, hasil dari tahap ini adalah semua kode sumber java yang dikodekan UTF-8.
JAVAC menggunakan pengkodean UTF-8 untuk membaca kode sumber java dan mengkompilasinya menjadi kode biner pengkodean UTF-8 (yaitu .class). Ini adalah spesifikasi JVM untuk ekspresi string konstan dalam kode biner (pengkodean java).
Tahap ketiga adalah Tomcat (atau wadah aplikasinya) memuat dan mengeksekusi kode biner JAVA dari tahap kedua. Hasil keluarannya adalah apa yang terlihat di klien Saat ini, parameter contentType yang disembunyikan di tahap satu dan dua berhasil
pengaturan tipe konten.
Default untuk pageEncoding dan contentType keduanya adalah ISO8859-1. Jika Anda menyetel salah satunya dengan santai, yang lain akan sama (ini berlaku untuk TOMCAT4.1.27). setiap JSPC. pageEncoding tidak sama dengan contentType, yang lebih kondusif untuk pengembangan dan tampilan halaman web JSP teks CJKV di Asia (misalnya, pageEncoding=GB2312 tidak sama dengan contentType=utf-8).
File jsp tidak seperti .java. Ketika .java dibaca oleh kompiler, defaultnya adalah pengkodean yang sesuai dengan lokal yang ditetapkan oleh sistem operasi. Secara umum, baik kita menulis kode di Notepad atau di ue, jika tidak ada transcoding khusus, yang ditulis adalah konten dalam format pengkodean lokal. Oleh karena itu, metode yang diadopsi oleh kompiler hanya memungkinkan mesin virtual memperoleh data yang benar.
Namun hal ini tidak berlaku untuk file jsp. File ini tidak memiliki proses transcoding default, tetapi transcoding yang benar dapat dicapai dengan menentukan pageEncoding.
Misalnya:
<%@ halaman contentType="teks/html;charset=utf-8" %>
Kebanyakan dari mereka mencetak karakter yang kacau, karena "Apa kabar" yang saya masukkan berasal dari gbk, tetapi tidak diketahui apakah server menangkap "Apa kabar" dengan benar.
Ubah saja ke konten berikut
<%@ halaman contentType="text/html;charset=utf-8" pageEncoding="GBK"%>