Servlet响应的中文字符集问题
在Servlet中利用response向客户端浏览器输出中文时有时会遇到乱码问题,总结如下:
response输出流有两种,一是以字节流输出,一是以字符流输出。
一、以字节流输出:
1.默认编码输出木有乱码
2.通过response的setHeader方法设置编码utf-8,无乱码
3.通过response的setContentType方法设置编码utf-8,无乱码
4.输出数字建议以字符串形式输出
二、以字符流输出:
1.默认查iso-8859-1码表(SUN的Servlet规范要求的) ,客户端显示乱码
2.通过response的setHeader方法设置编码utf-8,无乱码
3.通过response的setContentType方法设置编码utf-8,无乱码
字节流以默认编码输出:
1 public void doGet(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 // 以字节流用默认编码向客户端输出中文数据,木有乱码 4 response.setContentType("text/html"); 5 6 String str = "喔呵呵呵呵"; 7 OutputStream out = response.getOutputStream(); 8 out.write("</br></br><div align=\"center\" style=\"font-size:25px; color:red\">".getBytes()); 9 10 out.write(str.getBytes()); 11 12 out.write("</div>".getBytes()); 13 out.close(); 14 }
字节流设置编码为utf-8输出:
1 public void doGet(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 4 // 通知客户端查UTF-8码表 5 response.setContentType("text/html;charset=utf-8"); 6 7 // 或者: 8 // response.setHeader("Content-Type","text/html;charset=utf-8"); 9 10 String str = "喔哈哈哈哈"; 11 OutputStream out = response.getOutputStream(); 12 out.write("</br></br><div align=\"center\" style=\"font-size:25px; color:red\">".getBytes()); 13 14 out.write(str.getBytes("utf-8")); 15 16 out.write("</div>".getBytes()); 17 out.close(); 18 }
字节流输出数字:
1 public void doGet(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 response.setHeader("Content-Type", "text/html;charset=utf-8"); 4 5 int i = 98; 6 OutputStream out = response.getOutputStream(); 7 8 out.write("</br></br><div align=\"center\" style=\"font-size:25px; color:red\">" 9 .getBytes()); 10 11 // out.write(i); 会输出字母b 12 13 // 输出数字98 14 out.write((i + "").getBytes()); 15 16 out.write("</div>".getBytes()); 17 out.close(); 18 }
字符流设置编码为utf-8输出:
1 public void doGet(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 // 通知客户端查UTF-8码表 4 response.setContentType("text/html;charset=utf-8"); 5 // 或者: 6 // response.setHeader("Content-Type", "text/html;charset=utf-8"); 7 8 String str = "喔嘿嘿嘿嘿"; 9 PrintWriter out = response.getWriter(); 10 out.write("</br></br><div align=\"center\" style=\"font-size:25px; color:red\">"); 11 12 out.write(str); 13 14 out.write("</div>"); 15 out.flush(); 16 out.close(); 17 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix