[Servlet] Java Web乱码
来源:互联网 发布:网络炒作事件 编辑:程序博客网 时间:2024/06/08 18:39
乱码
先看一个简单的例子:
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解码。
其实乱码问题出现的根本原因也就是编码和解码不一致产生的。
常见的编码
- UTF-8:国际编码
- GBK:中文编码,是GB2312的扩展,除了兼容GB2312外,还能显示繁体中文、还有日文的假名
- ISO8859-1:tomcat默认,不支持中文
通过浏览器调用Servlet,页面显示乱码
response乱码
解决方法:response.setContentType("text/html;charset=utf-8");
或者response.setHeader("content-type", "text/html;charset=utf-8");
原理:告诉浏览器用utf-8进行解析。
看下面两种情况:
情况一
问题代码如下:
OutputStream out = response.getOutputStream();String data = "博客";out.write(data.getBytes("UTF-8"));
- 乱码流程图
- 解决方案流程图
情况二
问题代码如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PrintWriter out = response.getWriter();String data = "博客";out.println(data);}
浏览器输出的结果为??
这是因为“博客”首先被封装在response对象中,因为IE和WEB服务器之间不能传输文本,然后就通过ISO-8859-1编码进行编码,但是ISO-8859-1中没有“博客”的编码,因此输出“??”,表示没有编码。
- 错误代码流程图
- 解决方案流程图
request乱码问题
POST请求
- 乱码流程图
- 解决方案
GET请求
问题本质是get方式传递的参数内容默认编码方式为ISO-8895-1,而且使用request.setCharacterEncoding(“utf-8”)也无法解决问题,现提供一种解决方法如下:
String usernameString = new String(username.getBytes("ISO-8859-1"),"UTF-8");
即先将字符串用ISO-8859-1编码成字节数组,然后用UTF-8编码将字节数组转换成字符串输出。
流程图如下:
参考
本文主要图片和内容来自博客。
阅读全文
0 0
- [Servlet] Java Web乱码
- Java web中servlet中文乱码问题
- java web Servlet 连接数据库乱码
- Java Web开发(JSP、Servlet)乱码的一揽子解决方案
- java web servlet的中文乱码处理篇
- Java Web -- Servlet(10) 中文乱码处理专题
- Java Web(二) Servlet中response、request乱码问题解决
- servlet web.xml 中文乱码
- java servlet 乱码
- java servlet + ajax乱码
- java servlet web.xm
- Java Web Servlet过滤器
- Java web之Servlet
- java Web Servlet
- java-web:servlet
- Java.Web - Servlet 随笔
- java web servlet
- java web Servlet
- 前端与后台交互所需技术
- 第十一篇 登录和注册
- 兔子数列变形
- Maven 多环境配置:开发,测试,生产环境
- java中枚举
- [Servlet] Java Web乱码
- LintCode Introduce Java & Coding Interview
- PHP memcache redis类
- Spring Web MVC(三)之注解
- ECP系统J2EE架构开发平台
- Activiti进阶(六)——连线(SequenceFlow)
- mysql官网下载旧版本
- AJAX实现局部刷新
- 错误:Mixed Content: The page at ‘https://XXX’ was loaded over HTTPS, but requested an insecure........