java开发中各种中文乱码问题解决策略「建议收藏」

java开发中各种中文乱码问题解决策略「建议收藏」一、request获取表单提交中文数据乱码问题的解决post提交方式处理中文方法通过post方式提交form表单时,首先会把数据放到request缓冲区里面,request缓冲区默认编码是iso8859-1,这个编码不支持中文,所以解决这个问题的方法就是设置request缓冲区的编码,即request.setCharacterEncoding(“utf-8”);2、get提交方式处理中

大家好,又见面了,我是你们的朋友全栈君。

一、request获取表单提交中文数据乱码问题的解决


  1. post提交方式处理中文方法

     通过post方式提交form表单时,首先会把数据放到request缓冲区里面,request缓冲区默认编码是 iso8859-1,这个编码不支持中文,所以解决这个问题的方法就是设置request缓冲区的编码,即
    
    request.setCharacterEncoding("utf-8");

2、get提交方式处理中文方法
get提交方式有四种处理方案

  • 修改tomcat的配置文件
    * 找到tomcat({tomcat}\conf\server.xml)的server.xml,找到修改端口的地方,添加一个属性 URIEncoding=”utf-8”
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443“ URIEncoding="utf-8"/>
  • 先对数据进行编码,再进行解码
          String username="中国";
           username = URLEncoder.encode(username, "utf-8");
           System.out.println("URLEncoder="+username);
           username = URLDecoder.decode(username, "utf-8");
           System.out.println("URLDecoder="+username);
  • 使用string的构造完成编码(这个比较常用)
username = new String(username.getBytes("utf-8"),"utf-8");
  • 直接在html的head中指定编码集(简单暴力)
 <meta charset="utf-8">

二、response向页面输出中文乱码问题的解决


 1)、 **使用字节流向页面输出中文**
    *  使用字节流向页面输出中文不一定会出现乱码问题,如果出现中文乱码问题,需要设置浏览器编码和设置字节数组的编码, 让这两个编码一样,不会有乱码问题
//设置浏览器的编码
    response.setHeader("Content-Type", "text/html;charset=utf-8");
    //设置字节数组的编码
    response.getOutputStream().write("字节流中文输出".getBytes("utf-8"));

2、) 使用字符流向页面输出中文
* 使用字符流向页面输出中文一定会产生乱码

    使用字符流输出中文,输出机制:首先把输入的内容放到response缓冲区里面,通过缓冲区向页面输出, 在response缓冲区里面有默认的编码 iso8859-1,该编码 不支持中文,设置response缓冲区,支持中文的编码,所以保持缓冲区和浏览器的编码一致就ok了。
//设置response缓冲区的编码
    response.setCharacterEncoding("utf-8");
    //设置浏览器的编码
    response.setHeader("Content-Type", "text/html;charset=utf-8");
    //使用字符流输出中文
    response.getWriter().write("字符流中文");

上面可以简写一行代码:

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

*注意:字节流和字符流向页面输出数据,不能同时使用(互斥的)。 使用字符流不能直接向页面输出数字(因为默认走ASCII,比如response.getOutputStream().write(97); 的输出结果是字符 a)

三、下载文件时,中文文件名乱码问题的解决

由于不同的浏览器采用不同的编码方式,所以需要根据不同的浏览器进行不同的处理。IE采用url编码,火狐浏览器采用base64编码,所以我们首先要知道用户使用的是什么内核的浏览器,通过
request.getHeader("User-Agent");

可以从请求头里面获取到浏览器的类型,然后做以下操作

//判断不同的浏览器,使用头User-Agent
    String agent = request.getHeader("User-Agent");
    //如果是火狐浏览器
    if(agent.contains("Firefox")) {
        //火狐采用base64编码
        filename = "=?UTF-8?B?"+
            new BASE64Encoder().encode(filename.getBytes("utf-8"))+"?=";
    } else {
        //ie浏览器使用url编码
        filename = URLEncoder.encode(filename, "utf-8");
    }

注意:文件下载需要设置以下头信息,无论文件是什么格式,都以下载的方式打开,而不会在浏览器里面直接显示出来

response.setHeader("Content-Disposition", "attachment;filename="+filename);

总结


个人认为,框架很好用,基础很重要。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156790.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 怎样可以把手机app的文字复制出来_Android长按弹出选项框

    怎样可以把手机app的文字复制出来_Android长按弹出选项框如果要实现长按复制文本,那么android是可以支持的,只要将textview的android:textIsSelectable=”true”就可以。Edittext继承textview,因此,,,查看TextView的API,里面就有这么一段介绍:ToallowuserstocopysomeoralloftheTextView’svalueandpasteitso…

  • LINUX centos 安装图形界面

    LINUX centos 安装图形界面以Centos6.5为例演示一下如何安装桌面环境。一、首先查看系统的运行级别以及是否安装了桌面环境1、使用命令runlevel查看当前系统运行级别,如图所示2、使用命令yumgrouplist|more查看是否安装了桌面环境的组件,如图所示二、再次从上面分析的结果看到,当前运行级别是3,而且也没有安装桌面环境的软件。然后我们使用命令查看一下桌…

  • 我的世界服务器必备指令手机版_我的世界服务器传送点指令

    我的世界服务器必备指令手机版_我的世界服务器传送点指令6、技能插件:【箭术】-Archery箭非常的酷。大约五分钟,这项技能会不断增加它的伤害随着级别的升高,最后你能射晕对手,对PVP有好处。还有,箭术等级越高,你就越容易从尸体上拿回箭。【制药学】-Herbalism这很受那些喜欢收获的人欢迎,捡起那些药草,比如:花啊,蘑菇啊。或者收割庄稼,都会让你提升技能。他的好处包括农业上两倍的掉率,增加面包和汤的效果。【剑术】Swords这项技能会给…

  • #利用DialogResult属性实现主程序的打开当前窗口的关闭

    #利用DialogResult属性实现主程序的打开当前窗口的关闭利用DialogResult属性实现主程序的打开当前窗口的关闭首先介绍一下非模式化窗体show()和模式化窗体showdialog()的概念:两种方法都能打开显示窗体,1.非模式化窗体show()建立新窗口后仍能对原窗口进行操作,比如点击frm窗口上的“登录”按钮,会弹出FrmMain窗口,弹出后仍能对原窗口frm进行操作(移动,点击登录按钮等操作)2.模式化窗体showdialog()建…

  • HTML5 CSS3 精美案例 : 达到VCD盒个性幻灯片

    HTML5 CSS3 精美案例 : 达到VCD盒个性幻灯片

  • Java 删除文件以及文件夹删除不了的问题

    Java 删除文件以及文件夹删除不了的问题问题所在今天在编写一个项目,流程是先创建一个临时文件夹存放生成的文件,再经过压缩导出,待导出成功后删除临时文件夹,但是怎么也删除不了,还以为是写的删除方法有问题,找来找去,试了很多方法也删除不了本来以为是打包的流没关闭,但是发现流都是关闭的,后来发现,是在生成的方法里,直接newFileWriter出来的,没有关闭,在这里提醒一下,关于操作文件或者文件夹一定都会用到流,所以用到的流一…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号