PrintWriter输出乱码问题,我们先看API

PrintWriter getWriter() throws IOException

Returns a PrintWriter object that can send character text to the client. The PrintWriter uses the character encoding returned by getCharacterEncoding().

If the response's character encoding has not been specified as described in getCharacterEncoding (i.e., the method just returns the default value ISO-8859-1), getWriter updates it to ISO-8859-1.

PrintWriter getWriter() throws IOException
Returns a PrintWriter object that can send character text to the client. The PrintWriter uses the character encoding returned by getCharacterEncoding().
If the response's character encoding has not been specified as described in getCharacterEncoding (i.e., the method just returns the default value ISO-8859-1), getWriter updates it to ISO-8859-1.

就是讲,在返回一个PrintWriter对象的时候,CharactorEncoding就已经确定了,就已经设置好了字符集了。什么时候设置的呢?

现在来看下setCharacterEncoding方法的实现:

public void setCharacterEncoding(String charset) {
if (isCommitted())
return;
// Ignore any call from an included servlet
if (included)
return;
// Ignore any call made after the getWriter has been invoked
// The default should be used
if (usingWriter)
return;
coyoteResponse.setCharacterEncoding(charset);
isCharacterEncodingSet = true;
}
其中usingWriter 标志为getPrinteWriter方法中设定,可见其控制逻辑为一旦返回了PrintWriter,本函数即不再生效。

综合以上,在servlet中输出中文,如果采用PrintWriter方式,需要在调用getPrintWriter()之前调用setContentType 或者 setCharacterEncoding;

如下:

/**
  * Ajax中的验证码问题
  *
  * @return void
  * */
 public void validate() {
  ActionContext actionContext = ActionContext.getContext();
  String sessionCode = (String) actionContext.getSession().get(
    Constant.VALIDATE_CODE);// 获取验证码生成时存入Session中的验证码
  if (sessionCode != null && sessionCode != ""
    && !sessionCode.equals(validateCode)) {
   try {
    HttpServletResponse response = ServletActionContext.getResponse();
    response.setContentType("text/html;charset=utf-8");
    PrintWriter printWriter = response.getWriter();
    printWriter.write("验证码错误");
    printWriter.flush();
    printWriter.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }
}

PrintWriter输出乱码问题相关推荐

  1. Web运行控制台输出乱码解决总结

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  2. java printwriter乱码_HttpServletResponse PrintWriter中文乱码解决方法

    首页 > Java Web > SpringMvc应用 > HttpServletResponse HttpServletResponse PrintWriter中文乱码解决方法 H ...

  3. IDEA控制台输出乱码解决方案

    2019独角兽企业重金招聘Python工程师标准>>> IDEA控制台输出乱码解决方案: intellij安装目录下bin\idea.exe.vmoptions文件 追加一句: -D ...

  4. 解决 IntelliJ IDEA Tomcat 控制台中文输出乱码问题

    解决 IntelliJ IDEA Tomcat 控制台中文输出乱码问题 参考文章: (1)解决 IntelliJ IDEA Tomcat 控制台中文输出乱码问题 (2)https://www.cnbl ...

  5. 【错误记录】Android Studio 编译信息输出乱码

    文章目录 一.报错信息 二.解决方案 一.报错信息 编译过程中 , 输出乱码信息 ; 二.解决方案 选择 " 菜单栏 / Help / Edit Custom VM Options &quo ...

  6. Jenkins控制台中文输出乱码解决方法

    Jenkins控制台中文输出乱码解决方法 参考文章: (1)Jenkins控制台中文输出乱码解决方法 (2)https://www.cnblogs.com/dreamer-fish/p/1181204 ...

  7. vscode 调试.net core 2.0 输出乱码解决方法

    vscode 调试.net core 2.0 输出乱码解决方法 参考文章: (1)vscode 调试.net core 2.0 输出乱码解决方法 (2)https://www.cnblogs.com/ ...

  8. python3 windows console 输出乱码问题

    python3 windows console 输出乱码问题 问题 在python里面print韩文时,控制台报如下错误: UnicodeEncodeError: 'gbk' codec can't ...

  9. VS code中使用code runner遇到两例问题之解决:1.输出乱码,2运行无响应(输出)

    VS code中使用code runner遇到两例问题之解决:1.输出乱码,2运行无响应(输出) 参考文章: (1)VS code中使用code runner遇到两例问题之解决:1.输出乱码,2运行无 ...

最新文章

  1. 2018-3-14智能算法(文章--优化问题的智能算法及其哲学内涵)笔记一(什么是优化问题)
  2. OC语言--SEL类型小记
  3. SAP同一公司不同工厂间物料转储方案比较
  4. ipsec ip替换_点到多点ipsec-vpn NAT穿透和固定IP共存
  5. volatile的原理和实现机制
  6. BZOJ 1070: [SCOI2007]修车(最小费用最大流)
  7. SpringCloud面试题及答案
  8. gdb 查看是否 栈溢出_ASLR、DEP与栈保护(HFUT-ZRB#x27;s Task)
  9. 在linux上安装redis
  10. Ubuntu安装好后,没有网络怎么办?
  11. 2022年,GIS专业要不要转战IT?
  12. org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates
  13. 高通量测序的方式:单端测序、paired-end/mate-paired(PE/MP)测序 解释
  14. 宽带多账号自动拨号工具
  15. C++循环结构实例:估算e值:计算e=1+(1/1!)+(1/2!)+…的近似值,1/n!小于10^(-7)时停止计算
  16. linux cat命令缩写,linux下cat命令详解
  17. Vue 使用 Vue-socket.io 实现即时聊天应用(实战篇 二)
  18. 7.统计UV、分组TopN
  19. 细说VCC/AVCC/VDD/AVDD之间的区别
  20. Android:代码混淆反混淆

热门文章

  1. 开放媒体联盟着手打造免费视频格式
  2. 五、网卡信息检测与网络流量检测
  3. cgb2008-京淘day10
  4. 服务器如何判断客户端非正常掉线-心跳连接
  5. win10打开英雄联盟假死黑屏
  6. android lte信号强度,手机信号强度表示
  7. (原创)Oracle10g客户端下载/安装
  8. 分享一个下载电子图书,文献的好网站
  9. 损失函数Loss相关总结(精细版)
  10. 【如何通过汉字首字母拼写查询数据】mysql数据库汉字首字母获取查询或通过ES插件elasticsearch-analysis-pinyin进行汉字首拼查询