码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-11-22 21:52:07      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:

问题来源:
  做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-x86\conf\server.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
 
 

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

标签:

原文地址:http://www.cnblogs.com/codeskilla/p/4986624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!