javaEE乱码问题

1.response对象:

向页面输出中文(乱码问题)
                字节:ServletOutputStream getOutputStream()      字节输出流
                     * 字节的输出中文的乱码
                     *     * 输出哈罗我的是否乱码呢?
                     *         * 不一定乱码。
                     *     * 解决办法
                     *         * 设置浏览器打开文件时所采用的编码
                     *             response.setHeader("Content-Type", "text/html;charset=UTF-8");
                     *         * 获取字符串byte数组时编码和打开文件时编码一致。
                     *             "哈罗我的".getBytes("UTF-8")
                    
                PrintWriter getWriter()                  字符输出流
                
                     * 字符输出中文是否乱码呢?
                     *     * 肯定乱码
                     *         response缓冲区的编码,默认值ISO-8859-1
                     *     * 设置response缓冲编码        
                     *         response.setCharacterEncoding("UTF-8");
                     *  * 设置浏览器打开文件所采用的编码
                     *      response.setHeader("Content-Type", "text/html;charset=UTF-8");
                     *  * 简写方式
                     *      response.setContentType("text/html;charset=UTF-8");
                     
                     
                * 总结:response对象输出中文,产生乱码。
                    * 字节
                        * 解决方案
                            * 设置浏览器打开文件时采用的编码
                                response.setHeader("Content-Type", "text/html;charset=UTF-8");
                                // 获取字节输出流
                                OutputStream os = response.getOutputStream();
                                // 输出中文* 获取字符串的byte数组采用的编码
                                os.write("哈罗我的".getBytes("UTF-8"));
                    
                    * 字符
                        * 解决方法
                            * 设置浏览器打开文件时采用的编码
                                response.setHeader("Content-Type", "text/html;charset=UTF-8");
                            * 设置response缓冲区的编码
                                response.setCharacterEncoding("UTF-8");
                                
                        * 简写的方式(等于上面的两句)
                            * response.setContentType("text/html;charset=UTF-8");

2.request对象

乱码问题解决:
                * POST请求乱码 :request.setCharacterEncoding("utf-8"); 
                
                * GET请求乱码
                    解决方案一:修改tomcat/conf/server.xml 
                        <Connector port="80" protocol="HTTP/1.1" 
                                   connectionTimeout="20000" 
                                   redirectPort="8443" URIEncoding="utf-8"/>
                    * 必须有修改tomcat服务器配置文件权限
                    
                    解决方案二:逆向编解码
                    username = URLEncoder.encode(username, "ISO8859-1");
                    username = URLDecoder.decode(username, "utf-8");
                    
                    解决方案三:简写的方式(推荐使用)
                    username = new String(username.getBytes("ISO-8859-1"),"utf-8");
                    
                * request获取中文数据乱码(总结:)
                    * post提交
                        * 设置request缓冲区的编码
                            request.setCharacterEncoding("utf-8"); 
                    * get提交
                        * String构造方法
                            username = new String(username.getBytes("ISO-8859-1"),"utf-8");

3.文件上传的乱码问题

          关于文件上传时的乱码问题:
            1.上传文件名称乱码
                ServletFileUpload.setHeaderEncoding("utf-8");                
            2.非上传组件内容乱码
                FileItem.getString("utf-8");
                
            3.上传文件信息是否会乱码,需要解决吗?
                不需要解决,因为我们在上传时,使用的字节流来进行复制。

4.文件下载时的乱码问题

        
            1.关于下载时中文名称资源查找不到
                原因:<a href='${pageContext.request.contextPath}/download?filename=天空.mp3'>天空.mp3</a>
                  这是get请求。
                  
                  在服务器端:
                  String filename = request.getParameter("filename");
                  
                 解决: new String(filename.getBytes("iso8859-1"),"utf-8"); 
                 
            2.下载文件显示时的中文乱码问题
                    response.setHeader("content-disposition", "attachment;filename="+filename);
                    
                    IE:要求filename必须是utf-8码
                    firefox:要求filename必须是base64编码.
                    
                    问题:怎样判断浏览器?
                        String agent=request.getHeader("user-agent");
                    
                        if (agent.contains("MSIE")) {
                            // IE浏览器
                            filename = URLEncoder.encode(filename, "utf-8");
                            
                        } else if (agent.contains("Firefox")) {
                            // 火狐浏览器
                            BASE64Encoder base64Encoder = new BASE64Encoder();
                            filename = "=?utf-8?B?"
                                    + base64Encoder.encode(filename.getBytes("utf-8"))
                                    + "?=";
                        }else {
                            // 其它浏览器
                            filename = URLEncoder.encode(filename, "utf-8");
                        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值