url中含有中文造成文件下载失败

一、场景

前段时间由于安卓客户端并发播放视频的需求量太大,造成视频卡顿的现象,因此使用java做了一套缓存视频的服务,把远程服务器的视频下载到内网服务器来解决这个问题。

二、问题引入

可是在使用流进行视频下载的时候,不含有中文的url会正常下载视频,包含中文的就会下载失败,后来经过一番查找解决办法之后发现只需要将url中的中文进行UTF-8转码即可,需要注意的是:

不能对整个url进行UTF-8转码,必须用正则表达式对url进行中文过滤板,只转码中文即可:

正则匹配方法:

public static String encode(String str, String charset) throws UnsupportedEncodingException {    Pattern p = Pattern.compile(zhPattern);    Matcher m = p.matcher(str);    StringBuffer b = new StringBuffer();    while (m.find()) {        m.appendReplacement(b, URLEncoder.encode(m.group(0), charset));    }    m.appendTail(b);    return b.toString();}

private static String zhPattern = "[\\u4e00-\\u9fa5]";

原文地址:https://www.cnblogs.com/gtblogs/p/10064613.html

时间: 2024-08-02 04:12:11

url中含有中文造成文件下载失败的相关文章

jquery.ajax的url中传递中文乱码问题的解决方法

jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQuery正在乱码的原因,在未指定字符集的时候,是使用ISO-8859-1 ISO8859-1,通常叫做Latin-1.Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符. JQuery的Ajax根本没有考虑到国际化的问题,使用了欧洲的字符集,所以才引起了传递中文出现乱码的问题. 而我们的UTF-8

解决Java工程路径中含有中文的情况

问题: 当Java工程路径中含有中文时,得不到正确的路径 *** 解决: 这其实是编码转换的问题.当我们使用ClassLoader的getResource方法获取路径时,获取到的路径被URLEncoder.encode(path,"utf-8")编码了,当路径中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要的真实路径,所以我们可以调用URLDecoder.decode()方法进行解码,以便得到原始的中文及空格路径. Java代码 : String package

js的url中传递中文参数乱码,如何获取url中参数问题

一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript”> function send(){ var url = "test01.html"; var userName = $("#userName").html(); window.open(encodeURI(url + "?userName="

jquery对url中的中文解码

项目中要实现一个select选择器选择后跳转url,并保存selected的值. url是用get来传递参数,所以考虑加载新页面时,读取参数值,并赋值到select中. 但是由于url的参数使用的是中文,select不识别,所以通过jquery现成的转码函数,一句话搞定~! select选中值的防刷新: 每次加载页面后读取url中的参数值,然后设定select的选中值,由于url中包含中文,使用了jquery的解码函数, var myurl=new LG.URL(window.location.

Extjs4.2 ajax请求url中传中文參数乱码问题

今天有个需求须要在url中传入中文參数.结果在后台取得时出现乱码,怀疑可能是编码问题.上网查询了资料,试了几种办法.发现有一种可行,记录在此,以便查阅. url中用encodeURI 进行2次编码: Ext.Ajax.request({ url:"updateadminuser.do?"+userid+"&uname="+encodeURI(encodeURI(uname)), success:function (response) { store.load

如何自动识别判断url中的中文参数是GB2312还是Utf-8编码?

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web;using System.Text.RegularExpressions; namespace ConsoleApplication2 {        class Program {                public static string DecodeURL2(String uriS

路径或文件名中含有中文的jar文件双击启动不了 -&gt; Java7的Bug?

至从安装了java7后,才发现部分可执行的jar文件双击都启动不了了. 比如所有的jar文件放在桌面上双击启动不了. 比如所有的文件名中含有中文的jar文件双击启动不了. 比如一个 abc.jar 放在c:\下可以双击启动,但移动到桌面上,双击启动不了了. 比如一个放在c:\下的abc.jar可以双击启动,如果移动到c:\我的jar文件夹\abc.jar 双击启动不了了. 以前在java6下好像没出现这样的事情... 2011-10-13

url中拼接中文参数,后台接收为乱码的问题

遇到在URL中拼接中文的参数,后台拿到的数据为乱码的问题. 解决的方法是在客户端对这个中文参数进行编码,然后服务端再进行解码就行了. 客户端编码(JavaScript) var url = "contract!select.action?chineseParam=" + encodeURI(encodeURI("我是中文参数")); 注意:编码的时候需要使用两次encodeURI()方法,写一个就是????号,写两个则输出: %4d%5a这种. 服务端解码(Java

为什么URL中的中文需要Encode两次?

在URL中传参的时候常常需要传入中文,这个时候就需要对中文参数进行编码,即URLEncode.但是,常常是Encode两次,而不是一次,为什么呢? 首先要知道,tomcat会自动解码一次: 这样的话,如果只Encode一次就传过去,会出现两种情况: 1.Tomcat的decode字符集与你Encode的字符集一致,正常显示中文: 2.decode与encode字符集不一致,乱码: 现在假设encode两次,那么: tomcat解码一次,将encode一次的字符串传出去: 程序员手动decode一