android下载中文名文件失败,求指点

ming7212412 2012-05-03 05:40:51
如题,我在做一个在线播放器,要求下载服务器音乐。英文名的音乐能够下载,但是遇到中文名的就失败了。网上找了很久了,有一个解决办法说是URL编码问题,链接如下:http://hi.baidu.com/daiwozouba/blog/item/b44f88b3be4dcdb1d9335afa.html可是我按照这个方法去弄了,依然不行,提示:FileNotFoundException。整个服务端结构如下:
下载部分代码如下:
String urlDownload = "http://192.168.1.8:8080/MOD_server/music/" + URLEncoder.encode("你看不到的天空.mp3", "UTF-8");
url = new URL(urlDownload);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
InputStream is = con.getInputStream();
byte[] bs = new byte[1024];
int len;
FileOutputStream os = new FileOutputStream(newFileName);
while ((len = is.read(bs)) != -1)
os.write(bs, 0, len);
os.flush();
os.close();
is.close();

服务器用的tomcat7.x,并且设置了UTF-8编码,基本都照上面连接那样做,但是却提示是文件找不到,错误提示如下:
图中提示的showPlayListActivity.java:89,就是InputStream is = con.getInputStream();这一段代码
我看了下路径也正确。把url改成同目录下的其它两首mp3是可以下载的,就中文那个不行。求助,help!烦了两天啊。哪位高手帮解决下,小子不胜感激!
...全文
276 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
s478853630 2014-05-28
  • 打赏
  • 举报
回复
java对中文路径是很敏感的,最好的解决办法是杜绝出现中文目录或中文的文件名称, 一般外网的linux服务器也不允许出现中文路径, 非得要中文名称,也不是不可以,只是不能直接用中文名称, 文件名称用英文或数字,数据库存中文就行了,做下载的时候不要直接用该文件的url, 而是用动态的url去处理,比如:http://www.abc.com/download.htm?id=1 根据这个这个id去数据库找到对应的数据,根据这条数据找到该文件的路径和名称(可以是中文), 再做下载(其实就是往客户端输出文件流):

InputStream input = new FileInputStream(new File("该文件的磁盘路径"));
OutputStream output = response.getOutputStream();
			byte[] buffer = new byte[1024];
			int i = 0;
			while ((i = input.read(buffer)) != -1) {
				output.write(buffer, 0, i);
			}
			input.close();
			output.flush();
			output.close();
这样,android就能接收到文件流,再把文件流在手机上写成文件,就完成的下载的过程 另外强调一点,中文名称只是在和用户交互的时候显示一下才用的,你的程序中大可不必用中文名称
yangsong551 2014-05-28
  • 打赏
  • 举报
回复
服务器端文件路径转码URLEncoder.encode(filedisplay, "UTF-8");
Ericlee_2000 2013-04-12
  • 打赏
  • 举报
回复
遇到同样的问题 可以这么解决 tks
little-bee 2012-05-13
  • 打赏
  • 举报
回复
这个可以我的问题解决了,谢谢了[Quote=引用 1 楼 的回复:]

把TOMCAT里的SERVER.XML改成这样试试
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>
[/Quote]
ccf234 2012-05-03
  • 打赏
  • 举报
回复
实在不行就用TOMCAT6.X吧
ccf234 2012-05-03
  • 打赏
  • 举报
回复
把TOMCAT里的SERVER.XML改成这样试试
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>

80,493

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧