يجب أن يتم "تشفير" JSP مرتين، ستستخدم المرحلة الأولى ترميز الصفحة، وستستخدم المرحلة الثانية utf-8 إلى utf-8، والمرحلة الثالثة هي صفحة الويب التي تنتجها Tomcat باستخدام contentType.
فيما يتعلق بالفرق بين سمات pageEncoding وcontentType في صفحات JSP:
pageEncoding هو ترميز ملف jsp نفسه
تشير مجموعة أحرف contentType إلى ترميز المحتوى عندما يرسله الخادم إلى العميل.
يجب أن يتم "تشفير" JSP مرتين، ستستخدم المرحلة الأولى ترميز الصفحة، وستستخدم المرحلة الثانية utf-8 إلى utf-8، والمرحلة الثالثة هي صفحة الويب التي تنتجها Tomcat باستخدام contentType.
المرحلة الأولى هي تجميع jsp في .java، وسيتم قراءته وفقًا لإعدادات pageEncoding. والنتيجة هي ترجمة نظام التشفير المحدد إلى كود مصدر UTF-8 JAVA موحد (أي .java). الإعداد خاطئ، أو لا يوجد إعداد، وما يخرج هو أحرف صينية مشوهة.
المرحلة الثانية هي التجميع من كود مصدر JAVAC الخاص بـ JAVA إلى Java byteCode. بغض النظر عن نظام التشفير المستخدم عند كتابة JSP، فإن نتائج هذه المرحلة هي جميع أكواد مصدر Java المشفرة بـ UTF-8.
يستخدم JAVAC ترميز UTF-8 لقراءة كود مصدر Java وتجميعه في كود ثنائي لترميز UTF-8 (أي .class). هذه هي مواصفات JVM للتعبير عن السلاسل الثابتة في الكود الثنائي (تشفير Java).
المرحلة الثالثة هي أن Tomcat (أو حاوية التطبيق الخاصة به) تقوم بتحميل وتنفيذ كود JAVA الثنائي من المرحلة الثانية. نتيجة الإخراج هي ما يظهر على العميل. في هذا الوقت، تم تشغيل المعلمة contentType المخفية في المرحلتين الأولى والثانية
إعداد نوع المحتوى.
الإعدادات الافتراضية لـ pageEncoding وcontentType هي ISO8859-1. إذا قمت بتعيين أحدهما بشكل عرضي، فسيكون الآخر هو نفسه (هذه هي الحالة بالنسبة لـ TOMCAT4.1.27)، لكن هذا ليس مطلقًا، فهو يعتمد على طريقة المعالجة كل JSPC pageEncoding لا يساوي contentType، وهو أكثر ملاءمة لتطوير وعرض صفحات الويب JSP النصية CJKV في آسيا (على سبيل المثال، pageEncoding=GB2312 لا يساوي contentType=utf-8).
ملف jsp ليس مثل .java. عندما يقرأ المترجم ملف .java، فإنه يتم تعيينه افتراضيًا على الترميز المطابق للإعدادات المحلية التي حددها نظام التشغيل. بشكل عام، سواء كتبنا التعليمات البرمجية في برنامج Notepad أو في ue، إذا لم يكن هناك تحويل خاص للتشفير، فإن ما يتم كتابته سيكون المحتوى بتنسيق الترميز المحلي. لذلك، فإن الطريقة التي يعتمدها المترجم يمكن أن تسمح فقط للجهاز الظاهري بالحصول على البيانات الصحيحة.
ولكن هذا ليس هو الحال بالنسبة لملفات jsp، فهي لا تحتوي على عملية تحويل الترميز الافتراضية هذه، ولكن يمكن تحقيق تحويل الترميز الصحيح عن طريق تحديد ترميز الصفحة.
على سبيل المثال:
<%@ page contentType="text/html;charset=utf-8" %>
يقوم معظمهم بطباعة أحرف مشوهة، لأن عبارة "كيف حالك" التي أدخلتها جاءت من gbk، لكن من غير المعروف ما إذا كان الخادم قد التقط عبارة "كيف حالك" بشكل صحيح.
فقط قم بتغييره إلى المحتوى التالي
<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK"%>