<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-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

时间: 2025-01-21 21:39:21

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

解决osgEarth中文显示乱码的几种方法

解决osgEarth中文显示乱码的几种方法 在此感谢那些在路上那个帮助过别人的朋友,谢谢. 方法一: 通过自己写函数转换类型. 下面这三个函数先复制过去吧. void unicodeToUTF8(const std::wstring &src, std::string& result) { int n = WideCharToMultiByte( CP_UTF8, 0, src.c_str(), -1, 0, 0, 0, 0 ); result.resize(n); ::WideCharT

解决linux服务器上matplotlib中文显示乱码问题

报错信息: UserWarning: findfont: Font family [u'sans-serif'] not found. Falling back to DejaVu Sans 找不到字体,在绘制的图片中中文显示乱码 解决方法: 1. 查看配置路径: import matplotlib print (matplotlib.matplotlib_fname()) 2. 下载字体:simhei.tff : http://www.font5.com.cn/font_download.ph

Qt开发中文显示乱码

Qt开发中文显示乱码 来源 https://www.jianshu.com/p/ed269df8104d 参考 https://blog.csdn.net/J_H_C/article/details/93882284 为什么会出现乱码 首先,我们需要有的概念是乱码的问题是由编码和解码方式引起的.涉及到编码方式的地方有3个: 源码字符集 执行字符集 运行环境字符集 源码字符集确切的说是编译器认为源码文件的编码方式,执行字符集是可执行程序采用的编码方式,而运行环境字符集则是环境支持的编码方式.编译程

Atom中文显示乱码问题 UTF-8

Atom中文显示乱码问题 本来就是UTF-8文件,但中文还是显示不了.换了GBK.GB18030也不行. 解决方法: 给atom编辑器设置字体 从菜单中打开 Edit->Open your config选项,或者Packages->Setting views->Open, 找到config.cson文件中的editor子项,或者setting views中的font-family选项,把字体设置成 文泉驿 系列字体才可以显示中文.比如: 文泉驿微米黑,文泉驛微米黑,WenQuanYi M

Linux中文显示乱码?如何设置centos显示中文

Linux中文显示乱码?如何设置centos显示中文 怎么设置Linux系统中文语言,这是很多小伙伴在开始使用Linux的时候,都会遇到一个问题,就是终端输入命令回显的时候中文显示乱码.出现这个情况一般是由于没有安装中文语言包,或者设置的默认语言有问题导致的.以centos为例,操作Linux怎么查看语言,设置修改语言 1.查看当前系统语言 登陆linux系统打开操作终端之后,输入 echo $LANG可以查看当前使用的系统语言.如 2.查看安装的语言包 查看是否有中文语言包可以在终端输入 lo

ubuntu 中用vim打开txt等文件中文显示乱码的解决方法 &nbsp;

今晚用ubuntu 12.04 的vim编辑网页代码时,发现上面的中文显示乱码.这个html文件是我之前用gedit编辑的,在gedit里面显示正常,可是在vim下显示就是乱码了. 怎么解决ubuntu中vim显示中文乱码的问题呢? 首先,添加中文字符编码: sudo gedit /var/lib/locales/supported.d/local 在打开的文件中添加下面的中文字符集 zh_CN.GBK GBK zh_CN.GB2312 GB2312 zh_CN.GB18030 GB18030

解决Sublime Text 3中文显示乱码问题(转)

解决Sublime Text 3中文显示乱码问题(转) 1.打开Sublime Text 3,按Ctrl+-打开控制行,复制粘贴以下python代码,然后回车运行. 2. 复制并粘贴如下代码: import urllib.request,os,hashlib; h = '7183a2d3e96f11eeadd761d777e62404e330c659d4bb41d3bdf022e94cab3cd0'; pf = 'Package Control.sublime-package'; ipp = s

安装redhat时中文显示乱码(小方框)解决方法

在安装linux的时候,安装完了中文出现乱码或者是当时选错了选成了英文的,到时候中文显示乱码,下面说一下问题的解决: 在首次安装RHEL5时,如果选择的是英文,那么系统将不安装中文支持包,这样就导致了中文显示为乱码(小方框)....... 有很多人说vi /etc/sysconfig/i18n文件,其实根本就没有那个必要. 解决方法: 安装 1.fonts-chinese-3.02-9.6.el5.noarch.rpm.  如果无法安装,则加个--force 2.fonts-ISO8859-2-

解决“在UBUNTU下打开windows中创建的文本文件,中文显示乱码”的问题 。

在UBUNTU下打开windows中用notepad等工具创建的txt或程序源码等文本文件,中文显示乱码,原因是windows中的txt文件编码方式为GBK,UBUNTU中为utf-8. 解决办法:在终端中使用iconv命令对此文本文件进行转码,使用方法如图所示.具体到我的写法:iconv -f gbk -t utf-8 text.txt -o text.txt.utf8