Verstümmelte Zeichen treten häufig in der Java-Webprogrammierung auf. Lassen Sie uns nun im Detail erklären, wie Sie einrichten, um verstümmelte Zeichen zu vermeiden.
1 Webseitenkodierung
Beim Schreiben von a Webseite: Sie müssen das Codierungsformat der Webseite angeben. Verwenden Sie zur Angabe . Wenn der Browser zu diesem Zeitpunkt eine Anfrage liest oder sendet, speichert oder sendet er die Daten im angegebenen Codierungsformat. Hier ist es im UTF-8-Format.
Zum Beispiel Code-Snippet:
<form action="/Pro1/bb" method="post"> 用户名: <input type="text" name="username" ><br> 性别: 男<input type="radio" name="gender" value="男"> 女<input type="radio" name="gender" value="女"><br> 喜欢的颜色:<br> 红<input type="checkbox" name="color" value="红"> 绿<input type="checkbox" name="color" value="绿"> 蓝<input type="checkbox" name="color" value="蓝"> <br>来自的国家 <select name="country"> <option value="中国">中国</option> <option value="美国">美国</option> <option value="日本">日本</option> </select> <br> <input type="submit" value="提交"> <input type="reset" value="重置"> </form>
2 Das Backend liest die Anforderungsdaten
Um die angeforderten Daten im Java-Web-Servlet zu erhalten, müssen Sie Folgendes tun Senden Sie es Die Binärdaten müssen gemäß der entsprechenden Codetabelle dekodiert werden, um die entsprechende für Menschen lesbare Zeichenfolge zu erhalten. In diesem Beispiel wird die Post-Methode verwendet. Daher muss bei der Verarbeitung der Post-Anfrage das Codierungsformat festgelegt werden, bevor die chinesischen Anforderungsparameter abgerufen werden, da sonst verstümmelte Zeichen angezeigt werden. Weil der Server standardmäßig die Kodierungstabelle ISO-8859-1 zum Dekodieren verwendet.
Wenn Sie chinesische Zeichen in der Ausgabe ausgeben möchten, müssen Sie natürlich auch eine einheitliche Zeichenkodierung verwenden, hier ist utf-8, der Code lautet wie folgt
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String gender = request.getParameter("gender"); String[] colors = request.getParameterValues("color"); String country = request.getParameter("country"); out.println("<!DOCTYPE HTML>"); out.println("<HTML>"); out.println(" <HEAD><TITLE>测试servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print("<h1>以下是您的输入</h1>"); out.print("<p>"); out.print("您的用户名:"+username+"<br>"); out.print("您的性别:"+gender+"<br>"); out.print("您喜欢的颜色:"); for(String cr:colors){ out.print(cr+" "); } out.print("<br>"); out.print("您的国家:"+country+"<br>"); out.print("</p>"); out.println(" </BODY>"); out.println("</HTML>"); }
Hinweis: Die Anfrage hier .setCharacterEncoding("utf-8"); ist nur für den Inhalt der Anfrageentität gültig. Die Post-Request-Parameter werden in der Request-Entität gespeichert. Die Request-Parameter der get-Methode werden nach der URL platziert, beginnend mit einem Fragezeichen, und „&“ verbindet mehrere Parameter. Wenn Sie also die Parameter der Get-Methode erhalten möchten, müssen Sie die manuelle Dekodierung oder den Filter verwenden.
Manuelle Dekodierungsmethode. Der Einfachheit halber wird nur das Geschlecht dekodiert. Bei der tatsächlichen Verwendung muss jeder Parameter dekodiert werden: String gender = new String(req.getParameter("gender").getBytes("iso-8859 -1"),"utf-8") ;
An diesem Punkt kann das Phänomen verstümmelter chinesischer Schriftzeichen auf Webseiten und Servern perfekt gelöst werden. Denken Sie daran, dass alle verstümmelten Zeichen auf die Verwendung zurückzuführen sind Der Grund für unterschiedliche Codierungstabellen besteht darin, dieselbe Codierungstabelle zur Lösung des Problems zu verwenden.