解决Servlet中乱码问题
2015-12-21 11:32
197 查看
对于一个刚学J2EE的新手来说,在写一个servlet时经常会遇见乱码。其实解决乱码并不难,理解了就ok了。所以今天总结一下如何解决Servlet中乱码问题。
在servlet中乱码有两种情况:
1.响应乱码(response)
response.getOutputStream().write("中文".getBytes())输出数据,这是一个字节流,是什么字节输出什么字节,而浏览器默认用平台字节码打开服务器发送的数据,如果服务器
端使用了非平台码去输出字符的字节数据就需要明确的指定浏览器编码时所用的码表,以防止乱码问题。response.addHeader("Content-type","text/html;charset=utf-8")
response.getWriter().write(“中文”);输出数据,这是一个字符流,response会将此字符进行转码操作后输出到浏览器,这个过程默认使用ISO8859-1码表,而ISO8859-1中没有中文,于是转码过程中用?代替了中文,导致乱码问题。可以指定response在转码过程中使用的目标码表,防止乱码。response.setCharcterEncoding("utf-8");其实response还提供了setContentType("text/html;charset=utf-8")方法,此方法会设置content-type响应头,通知浏览器打开的码表,同时设置response的转码用码表,从而一行代码解决乱码。
2.请求乱码(request)
浏览器发送请求参数时,当初打开表单页面时使用的是什么编码就用什么编码发送数据,而服务器如果不指定就要iso8859-1打开,这样就造成乱码。
在servlet中乱码有两种情况:
1.响应乱码(response)
response.getOutputStream().write("中文".getBytes())输出数据,这是一个字节流,是什么字节输出什么字节,而浏览器默认用平台字节码打开服务器发送的数据,如果服务器
端使用了非平台码去输出字符的字节数据就需要明确的指定浏览器编码时所用的码表,以防止乱码问题。response.addHeader("Content-type","text/html;charset=utf-8")
response.getWriter().write(“中文”);输出数据,这是一个字符流,response会将此字符进行转码操作后输出到浏览器,这个过程默认使用ISO8859-1码表,而ISO8859-1中没有中文,于是转码过程中用?代替了中文,导致乱码问题。可以指定response在转码过程中使用的目标码表,防止乱码。response.setCharcterEncoding("utf-8");其实response还提供了setContentType("text/html;charset=utf-8")方法,此方法会设置content-type响应头,通知浏览器打开的码表,同时设置response的转码用码表,从而一行代码解决乱码。
response.setContentTye("text/html;charset=utf-8"); response.getOUtputStream().write("".getBytes("utf-8")); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8");//这一行代码其实内部也实现了 response.setCharacterEncoding("utf-8");意思是写了这句,上句代码可以不写 response.getWriter().write("");
2.请求乱码(request)
浏览器发送请求参数时,当初打开表单页面时使用的是什么编码就用什么编码发送数据,而服务器如果不指定就要iso8859-1打开,这样就造成乱码。
request.setCharacterEncoding("utf-8");//只对post请求的乱码有用
new String(str.getBytes("iso8859-1"),"utf-8"); //首先把得到的数据转换成iso8859-1的二进制 再把二进制进行utf-8编码 对于get请求只能手动编解码解决乱码问题。
相关文章推荐
- git的安装及配置
- RabbitMQ学习总结(7)——Spring整合RabbitMQ实例
- 安卓开发 微博分享Couldn't load sdk from loader dalvik
- index
- android ndk-gdb 调试
- LeetCode Copy List with Random Pointer
- angularJS权威教程自动化测试笔记(三)
- View篇——实现Excel表格显示
- Quartz CronTrigger最完整配置说明
- angularjs页面传参方式
- eclipse+maven的web项目访问jsp乱码
- javascript中隐藏显示的样式表属性
- mongoose 源码分析 ppt
- [转] 定位Oops的具体代码行
- 推送证书p12文件转换成pem的命令
- 连续五个班爆满超110人!淡季PHP为何如此疯狂?
- 一名交互设计师必备的知识架构
- 随记
- 实施和使用 Singleton 设计模式的有效方式
- Centos修炼----->centos7办公环境打造(No1--桌面快捷方式创建)