• <video/><img/>路径带中文,显示乱码(URIEncoding)


    问题来源:
      做html5的video的时候,在设置播放文件的文件名为中文的时候,出现GET请求的文件名为乱码(实际上,也不是乱码,是对应的"utf-8"字符串的byte数组的16进制表示的字符串。∵我设置的jsp/html编码都是"utf-8")
     
      尝试了一般的处理手段(如 “request.setCharacterEncoding("utf-8");”,“str = new String(str.getBytes("ISO-8859-1"),"utf-8");”,“URLEncoder.encode”,“URLEncoder.encode”),都不见效。
     
      想到,类似<video>,<img/> 等的数据请求,是浏览器客户端直接向tomcat发送的请求信息,然后tomcat也直接就将数据发给浏览器了,请求的信息 并不会经过 我们编写的 jsp、servlet、filter等的处理,因此 上面的处理手段不会生效。
    用<img/>测试了一下,测试代码为:
     1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     2 <html>
     3   <head>
     4     <title>主页</title>
     5     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     6   </head>
     7   <body>
     8       主页 <br>
     9     <br/><br/>
    10     <img src="花.jpg" alt="郁金香" />
    11   </body>
    12 </html>
     1 <%@ page language="java" import="java.util.*, fileTraversal.*, java.net.*" pageEncoding="utf-8"%>
     2 <%request.setCharacterEncoding("utf-8");%>
     3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     4 <html>
     5   <head>
     6     <title>主页</title>
     7     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     8   </head>
     9   <body>
    10       主页 <br>
    11     <br/><br/>
    12     <%
    13     String str = "花.jpg";
    14     //String str = URLEncoder.encode("花.jpg", "utf-8");
    15     %>
    16     <script type="text/javascript">
    17         window.onload = function()
    18         {
    19         //    var img01 = document.getElementById("img01");
    20         //    img01.src = encodeURI("<%=str%>");
    21         };
    22     </script>
    23     <img id="img01" src="<%=str%>" alt="郁金香" />
    24   </body>
    25 </html>

    测试结果:

     
     
      于是在网上搜索 “<img/>路径带中文 乱码”的相关处理,暂时(20151025) 我只找到下面这一种处理方式(修改 “??apache-tomcat-7.0.47-windows-x86confserver.xml”的配置):
     
      1、原来的 <Connector/>的内容为:
      <Connector port="8080" protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" />
     
      2、添加 URIEncoding 的设置后,变成:
      <Connector port="8080" protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" URIEncoding="UTF-8"  />
     
      3、重启 tomcat,测试 一切OK。
    PS:注意:这样修改之后 tomcat向 我们编写的jsp、servlet、filter等 发送信息的时候,就是"UTF-8"编码了,有些地方的“str = new String(str.getBytes("ISO-8859-1"),"utf-8");”就不再需要了(调用了反而出错)(没有指定URIEncoding的时候,tomcat默认接收/发送的都是"ISO-8859-1"编码的信息)
     
    ZC:自我感觉,浏览器<-->tomcat的流程是这样的:
      浏览器 --> 发请求 --> tomcat --> 我们编写的jsp、servlet、filter等 --> tomcat --> 浏览器。
      其中,传送的数据 都是 byte数组的形式,又∵ tomcat的默认编码为ISO-8859-1,∴即使 jsp/html编码设置为utf-8,我们从tomcat得到的数据仍然是乱码(utf-8字符串的byte数组的16进制表示的字符串),需要操作“str = new String(str.getBytes("ISO-8859-1"),"utf-8");”进行转换。
      实际上,我觉得 处理中文乱码最简单的方式是 jsp/html/servlet/tomcat 的编码都设置成 utf-8,即可。(这样设置之后,就不再需要处理乱码的GET/POST方式,等等方式了) --> 这一条,待验证,以后自己边做边验证(20151025)。
     
     
     
    C
     
     
  • 相关阅读:
    使用history.back()出现"警告: 网页已过期的解决办法"
    thinkphp5 如何将带分隔符的字符串转换成索引数组,并且遍历到前台
    MYSQL查询某字段中以逗号分隔的字符串的方法
    SpringBoot项目docker化
    全选Js
    【同步工具类】CountDownLatch
    Elasticsearch 2.3.2 安装部署
    从网络获取多张二维码图片,压缩打包下载
    传统的线程互斥技术:Synchronized关键字
    定时器的编写
  • 原文地址:https://www.cnblogs.com/codeskilla/p/4986624.html
Copyright © 2020-2023  润新知