• Java中常见的几个乱码问题以及解决方法


    1.ajax--URL中的参数含中文,后台接受的参数出现乱码

    解决方法:

    第一步:在javascript中,对url进行两次编码

    url = "http://localhost:8080/MyData/SearchTopicServlet?topic="+topic;
    url=encodeURI(url);
    url=encodeURI(url);//记得一定是编码两次

    第二步:在servlet中,对获取的参数进行解码

    String topic=request.getParameter("topic");
    topic = java.net.URLDecoder.decode(topic, "UTF-8");

    2.servlet返回给ajax的中文乱码

    解决方法:

    在servlet中添加下面这一句话:

    response.setContentType("text/xml;charset=utf-8"); 

    3.TXT文件中含中文,读入以后,中文出现乱码

    解决方法:

    br=new BufferedReader(new InputStreamReader(new FileInputStream("E:\encodeBook.txt"),"UTF-8"));

    Java中文件读入,读取的编码原理:

    Reader 类是 Java 的 I/O 中读字符的父类,而 InputStream 类是读字节的父类,InputStreamReader 类就是关联字节到字符的桥梁,它负责在 I/O 过程中处理读取字节到字符的转换,而具体字节到字符的解码实现它由 StreamDecoder 去实现,在 StreamDecoder 解码过程中必须由用户指定 Charset 编码格式。值得注意的是如果你没有指定 Charset,将使用本地环境中的默认字符集,例如在中文环境中将使用 GBK 编码.

    Figure xxx. Requires a heading

                                        Java的I/O类处理图

    4.URL中的编码问题:

    解决方法:

     1 import java.net.URLDecoder;
     2 
     3 import java.net.URLEncoder;
     4 
     5 public class URLDecoderTest {
     6 
     7     public static void main(String[] args) throws Exception {
     8 
     9        //将application/x-www-form-urlencoded字符串
    10 
    11        //转换成普通字符串
    12 
    13        //必须强调的是编码方式必须正确,如baidu的是gb2312,而google的是UTF-8
    14 
    15        String keyWord = URLDecoder.decode("%E6%96%87%E6%A1%A3", "gb2312");
    16 
    17        System.out.println(keyWord);
    18 
    19       
    20 
    21        //将普通字符串转换成
    22 
    23        //application/x-www-form-urlencoded字符串
    24 
    25        //必须强调的是编码方式必须正确,如baidu的是gb2312,而google的是UTF-8
    26 
    27        String urlStr = URLEncoder.encode("文档", "gb2312");
    28 
    29        System.out.println(urlStr);
    30 
    31     }
    32 
    33 }

      原理:

    1.application/x-www-form-urlencoded是一种编码类型。

      这种类型会:

      1.字符"a"-"z","A"-"Z","0"-"9",".","-","*",和"_" 都不会被编码;
      2.将空格转换为加号 (+) ;
      3.将非文本内容转换成"%xy"的形式,xy是两位16进制的数值;
      4.在每个 name=value 对之间放置 & 符号。
      

    2。网页中的表单使用POST方法提交时,数据内容的类型是 application/x-www-form-urlencoded,我们经常会在浏览器的地址栏里看到这样的字串%E6%96%87%E6%A1%A3,这就是被编码后的字符串。

    3.UrlEncoder是将普通字符串转换成application/x-www-form-urlencoded字符串。

    5.servlet中的乱码问题:

      1.若接受到的字段为乱码:

      缺少了这一句话:request.setCharacterEncoding("utf-8");

      2.跳转后的页面出现乱码:

      缺少了这一句话:response.setContentType("text/html");

      并且session之前不可以有out 输出

    6。JS动态给html页面赋值,出现乱码

      js文件中出现这种给html页面动态添加内容时,添加内容若是中文,注意在jsp页面中设置编码,否则会出现乱码。

      js中为:$('userpwd_error').innerHTML = "<img src='images/wrong.gif'>密码不能为空";

        修改方法:

        在jsp中如下设置:

         1. <html>
         2. <head>
         3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
         4. <script type="text/javascript" src="text.js" charset="GB2312"></script>
         5. </head>
         6. <body>
         7.
         8. </body>
         9. </html>

    其实就是第二行charset惹的祸,第二行主要是设定了整个页面的字符编码方式,在此例中是UTF-8。
    而在JS中是普通的GB2312或者是GBK编码方式。所以会产生乱码。注意第三行最后的charset=”GB2312″。

    7.超链接传参,参数是中文时,后台接收的参数是乱码

    在jsp中:

    <% while(rs.next()){%>
    	<tr>
           <td><%=rs.getInt(1)%></td>
    	<td><%=rs.getString(2)%></td>
    	<td><%=rs.getString(3)%></td>
    	<td><%=rs.getString(4)%></td>
    	<td>
    <a href="./user.jsp?id=<%=rs.getString(1)%>&username=<%=rs.getString(2)%>&password=<%=rs.getString(3)%>&authority=<%=rs.getString(4)%>"><i class="icon-pencil"></i></a> 
    <a href="./../AdminDelUserServlet?id=<%=rs.getInt(1)%>" 
    onclick="return confirm('确定删除该用户吗?')"><i class="icon-remove" ></i></a>
              </td>
        </tr>
    <%} %>    
    

      后台接收时如下设置,中文则不会出现乱码:

    String id=request.getParameter("id");
    String username=new String(request.getParameter("username").getBytes("ISO-8859-1"),"utf-8");
    String password=request.getParameter("password");
    String authority=request.getParameter("authority");
  • 相关阅读:
    Jane Austen【简·奥斯汀】
    I Like for You to Be Still【我会一直喜欢你】
    Dialogue between Jack and Rose【jack 和 Rose的对话】
    git删除远程.idea目录
    码云初次导入项目(Idea)
    DelayQueue 订单限时支付实例
    eclipse安装spring的插件
    redis安装命令
    log4j详解
    jstree API
  • 原文地址:https://www.cnblogs.com/lyr2015/p/4756127.html
Copyright © 2020-2023  润新知