• Servlet乱码问题


    数据像水流一样从一个地方流向另一个地方。
    文本流是特殊的二进制流。
    既然提到乱码问题,那就必然是用错误的编码去解释二进制流。
    在传输过程中必然都是以二进制流传输的。
    所以,我们需要考虑的是:

    • 有几个数据流中转站
    • 每个中转站是编码时(将数据流发出时)出现问题,还是解码时(接受数据流时)出现问题
    • 乱码问题调试非常简单,从数据源头开始,逐个结点打印一下信息,立马就能定位错误

    下面解决最经典的乱码问题:Servlet读取数据库,然后resp.getWriter.print()到前端,出现乱码。
    结点很显然有三个:
    数据库(1)=>(2)web程序(3)=>(4)前端
    一共有4个位置可能会发生乱码。
    配置数据库时,要使用utf8编码:
    jdbc:mysql://weiyinfu.cn:3306/come?useUnicode=true&characterEncoding=UTF-8
    web程序进行编码时(对应3处),resp.setCharacterEncoding("utf8");
    前端进行解码时(对应4处),resp.setHeader("content-type","text/html;charset=UTF-8");

    实际上,Servlet也可以通过resp.getOutputStream()直接打印二进制流,这样跟resp.getWriter()+resp.setCharacterEncoding()效果是一模一样的。

    下面说几个症状:
    (1)、前端网页显示???,这表示前端彻底无法解码,多半是因为服务器端发过来时编码出错了
    (2)、前端显示汉字,如“锟金考烫烫烫”等,这表示浏览器解码错误

  • 相关阅读:
    c++vector(入门级)
    端口扫描(TCP)
    推荐安全程序员的书单(系统、网络、安全等)
    My latest news(--2016.12.31)
    HTML+JS+DOM【选项卡自动切换】
    20170916考试总结
    [Usaco2014 Mar]Sabotage
    [SHOI2014]概率充电器
    [Usaco2010 Dec]Exercise 奶牛健美操
    [JZOJ4687]奇袭
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/7385091.html
Copyright © 2020-2023  润新知