Kode sampah adalah sakit kepala. Artikel ini memperkenalkan solusi untuk masalah Cina yang kacau di Spring MVC, yaitu sebagai berikut:
1: Solusi untuk kode kacau setelah formulir kirim pengontrol memperoleh parameter Cina
Catatan: Pengkodean halaman JSP diatur ke UTF-8
Metode pengiriman formulir harus diposting. Filter pengkodean pegas di bawah metode GET tidak memiliki efek apa pun
<%@ halaman bahasa = "java" import = "java.util.*" pageEncoding = "UTF-8"%> <form Action = "$ {ctx}/user/adduser" name = "UserForm" Method = "POST">Ubah Web.xml dan tambahkan filter pengkodean sebagai berikut (perhatikan bahwa Anda perlu mengatur nilai parameter forceEncoding ke true)
<filter> <filter-name> karakterEncodingFilter </tilter-name> <nilter-class> orgspringframeworkwebfiltercharacterencodingfilter </filter-class> <Ilin-param> <param-name> </param-name> <param-value> UTF-8 </param-value> </init-param> <param-value> <param-name> forceEncoding </param-name> <param-value> true </param-value> </it-param> </tilter> <nilter-Mapping> <nilter-name> KarakterenEncodingFilter </filter-name> <Rerl-pattern>/*</ruRl-pola> </filter-mapping>
Catatan: Apakah pengkodean database mendukung bahasa Cina
Apakah tabel database dan bidang tabel benar?
Ubah Pengaturan Parameter dari Database Koneksi Konfigurasi:
<nama properti = "url" value = "jdbc: mysql: // localhost: 3306/dbname? UseUnicode = true & characterencoding = utf-8"> </property>
Kasus pertama:
Masukkan halaman JSP dalam bahasa Cina dan masukkan kode yang kacau pengontrol. Pada saat ini, yang perlu Anda atur adalah menambahkan filter yang dikodekan (filter) untuk menyatukan pengkodean ke UTF-8. Kodenya adalah sebagai berikut:
File Konfigurasi Web.xml:
<filter> <nilter-name> karakterEncodingFilter </tiler-name> <nilter-class> orgspringframeworkWebFilterCharaChingEncodingFilter </filter-class> <Inch-param> <param-name> encoding </par AM-name> <param-value> UTF-8 </param-value> </it-param> </tiler> <nilter-Mapping> <STERFER-NAME> KarakterEncodingFilter </tiler-name> <rats-pola>/*</ruRl-pattern> </filter-mapping>
Perlu dicatat di sini bahwa yang terbaik adalah menempatkan kode ini di awal webxml, karena ada urutan intersepsi, dan jika ditempatkan di belakang, mudah untuk memblokirnya.
Kasus kedua:
Database Data Cina, halaman JSP menampilkan kode kacau (bukan kode kacau dalam arti yang ketat, tetapi disajikan dalam bentuk tanda tanya)
Karena interaksi data antara front dan backend kami menggunakan data JSON, saya tidak tahu banyak tentang alasan situasi ini. Saya belum pernah menemukannya sebelumnya. Saya hanya bisa menyalahkan diri sendiri karena telah melakukan terlalu sedikit proyek, dan tidak sulit untuk menyelesaikannya. Saya hanya perlu mengatur format pengkodean saat mengonversi JSON. Kodenya adalah sebagai berikut:
ResponseSetContentType ("Aplikasi/JSON; Charset = UTF-8"); // Cegah transmisi data dari kode yang kacauJika Anda menulis kalimat ini, Anda tidak akan memiliki kode yang kacau lagi.
Situasi ketiga:
Halaman ini juga benar untuk meneruskannya ke controller, tetapi setelah menyimpannya ke database, itu akan kacau (itu bukan kode kacau yang ketat, seperti halnya di atas, ada semua tanda pertanyaan)
Masalah ini telah mengganggu saya untuk sementara waktu. Saya mulai merasa bahwa format pengkodean database tidak benar. Masih tidak mungkin untuk membuat ulang database dengan format pengkodean UTF-8. Akhirnya, saya merasa itu masalah dengan JBoss. Server kami menggunakan JBoss. Saya mencari di internet dan menambahkan format pengkodean saat menghubungkan ke sumber data. Kodenya adalah sebagai berikut:
<DataSource jta = "true" jndi-name = "java: jboss/datasources/jcmysqlds" pool-name = "jcmysqlds" diaktifkan = "true" use-java-context = "true"> <connection-url> jdbc: mysql: // 46/itoo_basic_basic? UseUnicode = true & characterencoding = utf-8 </connection-url> <driver> mysql </drier> <oll> <pref Ill> false </prefill> <gia strict-min> false </use-strict-min> <lhush-strategy> failingconnectionlyly </flush-strategy> </pool> <security> <suser-name> root </user-name> <s pass <a href = "http: // wwwitnet/edu/ebg/" target = "_ blank"> word </a>> 123456 </spass <a href = "http: // wwwitnet/edu/ebg/" target = "_ blank"> Word </a> </Security> </unggat
1. Halaman kacau
Halaman relatif mudah dipecahkan, dan mereka sering mengatur set karakter yang relevan pada halaman JSP yang sesuai atau halaman HTML. menyukai
%@halaman bahasa = "java" contentType = "Text/html; charset = UTF-8" pageEncoding = "UTF-8"%
2. Nilai transfer kode kacau
Selama proses transmisi nilai, kode yang kacau juga sering muncul. Belum lagi skenario apa itu, solusi yang umum digunakan mencakup konfigurasi berikut filter yang ditentukan
<!-- Configure the request filter, set the encoding format to UTF-8, avoid Chinese garbled --> <filter> <filter-name>springUtf8Encoding</filter-name> <filter-class>orgspringframeworkwebfilterCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <Param-Value> UTF-8 </param-value> </it-param> <in-param> <inin-param> <param-name> ForceEncoding </param-name> <param-value> true </param-value> </init-param> </filter>
Setel Permintaan Karakter Permintaan
Seringkali, setelah melewatinya dari meja depan ke pengontrol atau tindakan yang sesuai, kode kacau muncul. Izinkan saya memberi tahu Anda ide umum saya adalah mencetak set permintaan karakter default itu sendiri.
SystemoutPrintln (RequestGetCharacterencoding ());
Kemudian, menurut situasi, jika set karakter yang diperlukan tidak dicetak, atur set karakter yang sesuai.
requestsetcharacterencoding ("UTF-8");Tentu saja, beberapa situasi mungkin tidak diselesaikan. Anda dapat menggunakan berikut ini
String str = newstring ((requestGetParameter ("BigQuestionTypeName")) getBytes ("ISO-8859-1"), "UTF-8")3. Simpan Kode Kelahiran Database
Ini relatif rumit. Di sini, LZ menggunakan mysql, dan mysql digunakan untuk memperkenalkan cara menyelesaikan masalah yang kacau ini
Seperti yang kita semua tahu, apakah itu JDBC, Hibernate atau JPA murni, lebih baik menggunakannya di bagian bawah. Faktanya, pada dasarnya JDBC, dan kerangka kerja yang sesuai hanya dienkapsulasi secara relevan. Jadi, apa pun jenis teknologi itu, ia akan menggunakan URL yang terhubung ke database. Jadi URL perlu diperiksa terlebih dahulu
url
Situasi standar akan menambahkan pengaturan set karakter yang sesuai setelah situasi yang sesuai, sebagai berikut
JDBCURL = JDBC: mysql: /// itcastoa? UseUnicode = true & characterencoding = UTF-8
Seperti disebutkan di atas, UseUnicode perlu terhubung ke karakter yang ditetapkan dalam database, & apa ini? Ini adalah masalah, di XML & adalah karakter Escape dari &. Jika Anda menggunakan XML untuk mengonfigurasi konfigurasi koneksi database yang sesuai, maka itulah masalahnya. Tetapi jika Anda menggunakan properti **, akan ada masalah, dan Anda harus menghapus amp. Ini memang pengalaman LZ memiliki kepala berdarah.
database
Masalah di sini juga relatif sulit untuk dihadapi. Masuk ke database
Lihat Format Pengkodean Database
<img src = "http: // www2ctocom/unggah/collfile/20150302/png" 7plu ninja htahle ninja: 1Opentablaug: Sun. 1 hari sql> "=" ">
Anda dapat melihat apakah set karakter server adalah Latin1. Di sini kita perlu berbicara tentang set karakter yang umum digunakan.
Untuk kedamaian dan kemakmuran dunia, organisasi ISO telah menetapkan solusi set karakter Unicode. Pengkodean Unicode adalah jembatan komunikasi timbal balik dan konversi antara penyandian yang berbeda, termasuk biner 32-bit, sehingga dapat mengakomodasi karakter dengan kekuatan 2, yang cukup untuk kehidupan. Unicode dibagi menjadi tiga solusi sesuai dengan kebutuhan yang berbeda.
UTF8: Digunakan untuk menyelesaikan pengkodean yang muncul dalam berbagai bahasa secara internasional. Untuk bahasa Inggris, 8 digit digunakan, dan untuk Cina, 3 digit digunakan. Ini dapat ditampilkan pada browser apa pun yang mendukung set karakter UTF9 tanpa pemrosesan lebih lanjut.
Dua lainnya adalah UTF16 dan 32, yang tidak akan diedit di sini. Anda dapat memeriksanya sendiri, tetapi masih karena kenyamanan penyimpanan dan digunakan untuk memutuskan mana yang akan digunakan.
Oke, yang relatif akrab adalah GBK, umumnya dikenal sebagai Kode Standar Nasional, yang dirumuskan oleh standar nasional Cina, dan hanya berisi karakter Cina. Jadi dibandingkan dengan keduanya, UTF8 adalah kompatibilitas yang lebih baik, tetapi memiliki kapasitas penyimpanan yang lebih besar.
Kembalilah segera, secara kasar, jika Anda menagih set karakter, atau kembali dan menyelesaikan masalah terlebih dahulu. Jadi tidak apa -apa menggunakan GBK atau UTF8 di sini. Tapi Latin1 jelas tidak mungkin, ini terutama ditetapkan oleh perintah seperti itu
Bagian server, basis data, dan tabel data diatur secara terpisah, dan pengkodean koneksi harus diatur. Pengaturan pengkodean koneksi adalah sebagai berikut:
mysql> set karakter_set_client = 'gbk'; mysql> set karakter_set_connection = 'gbk'mysql> set karakter_set_results =' gbk '
Siapkan penyandian dan Anda dapat berhasil memasukkan Cina di bawah ini. Bahkan, itu dapat diselesaikan dalam satu kalimat.
Perintah yang umum digunakan
Lihat Format Pengkodean Database
Tampilkan variabel seperti 'karakter_set_%';
Lihat pembuatan tabel dalam database
Tampilkan Buat TableName Tabel;
Atur format pengkodean database
SetNames 'GBK';
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.