Android 文件下载中文名乱码的解决办法

         Android用Java实现下载如果下载路径的文件名是中文,会出现乱码。new URL(String filepath),filepath需要是一个字符串,如果出现中文,不会默认为字符串,编码方式不同吧,URL的字符集只允许"US-ASCII"编码。解决办法:

        String filename = "文件中文名.jpg";

        URL url = new URL(fileParentUrl+ File.separator  + java.net.URLEncoder.encode(filename,"UTF-8"));//用UTF-8编码

 参考文件:

@1:

//uriStr这个URL比如在服务端存在这样的路径,如果你这个路径乱码///了,服务端个版本不能再,那肯定找不到这个文件,那么就无法下载咯
String uriStr=localhost+java.net.URLEncoder.encode(url,"UTF-8");
//主机名别encode直接encode文件名···
URL url=new URL(uriStr);
Log.v("url",url);//看看这个log的路径,看看与你服务端的是否一致,不一致的话,你java.net.URLEncoder.encode(url,"UTF-8");//编码以下,保证不能乱码、、
HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();

 @2:
中文文件名本来就有问题。因为“URL”这个东西的规范里规定,URL的字符集只允许"US-ASCII"。
中文字符放在URL里时应该先转换成字节(根据GB、BIG5或者UTF8),然后使用16进制转义。一般(这真没法说什么叫“一般”)服务器接受UTF-8字符,但是,真的是和服务器相关。
Firefox访问http://localhost:1234/中文.html的时候,实际发出的请求是这样的:

引用
GET /%E4%B8%AD%E6%96%87.html HTTP/1.1
Host: localhost:1234
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.8,zh-cn;q=0.5,zh;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive

看出来这个“中文”是按UTF-8转义的。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值