zoukankan      html  css  js  c++  java
  • 中文乱码错误(网页中、与服务器传输信息中出现的中文问题解决方案)

    中文乱码问题常常出现,本文借鉴前辈的经验,再作如下归纳汇总。

    第一类问题出现在JSP中:

    错误页面:

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    2 <%@ page contentType="text/html;charset=iso8859-1"%>
    3 <html>
    4 <head>
    5 <title>乱码啊</title>
    6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    7 </head>
    8 </head>
    9 <body>
    10 乱码啊!!咋回事??
    11 </body>
    12 </html>


    这个页面有三个部分涉及到了编码的设定:

    第一处的编码格式为jsp文件的存储格式。Eclipse会根据这个编码格式保存文件。并编译jsp文件,包括里面的汉字。
    第二处编码为解码格式。这个页面中存为UTF-8的文件被解码为iso8859-1,页面中的中文肯定出乱码。此行如果没有,默认也使用iso8859-1的编码格式,也会出现乱码。所以第一处与第二处必须一致才可以。
    第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式可以省略。有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面,导致浏览器混淆了编码格式,出现了乱码。

    改正的页面:
    UTF-8 改为 gb2312 也没有乱码

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    2 <%@ page contentType="text/html;charset=UTF-8"%>
    3 <html>
    4 <head>
    5 <title>木有乱码</title>
    6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    7 </head>
    8 </head>
    9 <body>
    10 木有乱码。耶!
    11 </body>
    12 </html>


    第二类问题出现在数据传输中(GET和POST传参时出现乱码)

    • Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;
    • Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。
    • Get限制Form表单的数据集的值必须为ASCII字符;
    • 而Post支持整个ISO10646字符集。

    原因:

    tomcat的内部编码格式iso8859-1。提交数据时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受,导致乱码。

    解决方案:

    1、GET请求参数处理
    String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ;对每个中文字符串进行转码。
    B、POST请求参数处理
    在处理请求页面上开始处,执行请求的编码代码,request.setCharacterEncoding("UTF-8"),把提交内容的字符集设为UTF-8。使用String str = request.getParameter("something");即可得到汉字参数。

    应用举例:
    (一)

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    2 <%@ page contentType="text/html;charset=UTF-8"%>
    3 <%
    4 request.setCharacterEncoding("UTF-8");
    5 %>
    6 <html>
    7 <head>
    8 <title>木有乱码</title>
    9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    10 </head>
    11 </head>
    12 <body>
    13 木有乱码。耶!
    14 </body>
    15 </html>

    (二)
    在处理请求的Servlet中的doPost方法中加上request.setCharacterEncoding("UTF-8"),达到的效果是相同的。

    (三)上面示例中UTF-8 改为 gb2312 也可以。

  • 相关阅读:
    Maven打包时过滤测试代码或指定特定的测试类(maven-surefire-plugin)
    Maven项目配置外部依赖(本地依赖)
    手把手教你创建「人物角色Persona」
    微服务与Docker介绍
    深入学习微框架:Spring Boot
    技术干货:我们的项目是如何技术选型的
    为什么选择Spring Boot作为微服务的入门级微框架
    Android Material Design 兼容库的使用详解
    Android 实现QQ、微信、新浪微博和百度第三方登录
    Android ijkplayer详解使用教程
  • 原文地址:https://www.cnblogs.com/windlaughing/p/2415627.html
Copyright © 2011-2022 走看看