javaweb怎么处理中文乱码

 我来答
育知同创教育
2017-11-03 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部

1.UTF-8国际编码,GBK中文编码。GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立;

2、web tomcat:默认是ISO8859-1,不支持中文的

3.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码;

4.getBytes() 是通过平台默认字符集进行编码;

二、引入

在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设置;而在Servlet中,也会遇到中文乱码问题;

比如:

OutputStream out = response.getOutputStream();

out.write(String );

输出中文时可能会出现乱码;

比如:

[java] view plain copy

  • protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {      

  • OutputStream out = response.getOutputStream();      

  • String data = "博客";      

  • out.write(data.getBytes("UTF-8"));  

  • 输出乱码的问题是程序用UTF-8编码,而浏览器默认用GBK解码了,因此会出现乱码;

    三、Servlet相关的几种乱码

    1、浏览器调用jsp,html等页面中文显示乱码

    此情况需满足两个要求:

    (1)文件本身是以utf-8编辑保存的(myEclipse中在properties中鼠标右键选择utf-8)

    (2)浏览器用utf-8解析:

    (手动)==> 在浏览器中右键选择编码格式为utf-8

    (智能)==> 在文件中写入如: <meta name="content-type" content="text/html; charset=UTF-8">  通过<meta>标签模拟response头,起到告诉浏览器用utf-8的编码解析

    (智能)==> response.setContentType("text/html;charset=UTF-8");起到告诉浏览器用utf-8的编码解析

    常用:

    <meta name="content-type" content="text/html; charset=UTF-8">或<meta charset="utf-8">

    <%@ pageEncoding="utf-8"%>

    <?xml encoding="UTF-8"?>

    2、通过浏览器调用servlet,页面显示乱码。

    Servlet乱码分为request乱码和response乱码;

    (1)response乱码问题

    解决方法:

    在网上很有效的解决方法是添加:

    response.setCharacterEncoding("UTF-8");

    解决不了,后来又搜到一条解决方法是:

    response.setContentType("text/html;charset=utf-8");或者 response.setHeader("content-type","text/html;charset=UTF-8");告诉浏览器用utf-8解析。(setHeader是HttpServletResponse的方法。如果想在拦截器Filter中设置字符编码,则无此方法,因为Filter的doFilter方法的参数类型是ServletResponse)

    两句都填上,后来终于解决了这个问题;

    其实我们应该思考一下本质:

    response.setContentType("text/html;charset=UTF-8"); 目的是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码;

    response.setCharacterEncoding("UTF-8");目的是用于response.getWriter()输出的字符流的乱码问题。如果是response.getOutputStream()是不需要此种解决方案的,因为这句话的意思是为了将response对象中的数据以UTF-8解码后的字节流发向浏览器

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式