android中intent带Uri传输时中文的乱码问题

本文介绍了一种在Android应用中处理中文文件路径的方法。当从一个Activity传递含有中文名称的视频文件路径到另一个Activity进行播放时,由于URI编码导致接收端出现乱码。文章详细解释了如何使用Uri.decode函数来正确解析中文路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作时遇到一个问题,我在VideoActivty中找到一个视频文件,启动Gallery3D中的MovieView来进行播放,然后在MovieView端得到此文件的路径。我当时传进了一个:

   String mpath = "/mnt/sdcard/叶问2.mp4";

的路径,其中文件名是中文的。然后我在MovieView中得到的文件名竟然是乱码,最开始我是这么处理的:


VideoActivty处的代码大致为:

  1. String mpath = "/mnt/sdcard/叶问2.mp4";  
  2. String type = "video";  
  3. File f = new File(mpath);  
  4. Uri uri = Uri.fromFile(f);  
  5. Intent intent = new Intent();  
  6. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  7. intent.setAction(android.content.Intent.ACTION_VIEW);  
  8. intent.setDataAndType(uri, type);  
  9. this.startActivity(intent);  
        String mpath = "/mnt/sdcard/叶问2.mp4";
        String type = "video";
        File f = new File(mpath);
        Uri uri = Uri.fromFile(f);
        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setAction(android.content.Intent.ACTION_VIEW);
        intent.setDataAndType(uri, type);
        this.startActivity(intent);


MovieView处理时用了异想天开的转码方式:

  1. path = new String(mUri.toString().getBytes("utf-8"), "GBK");  
path = new String(mUri.toString().getBytes("utf-8"), "GBK");

发现无论怎样处理都无法转成中文。通过查看官方文档发现URI把我们的path转成了 RFC 2396格式,不懂啊。。。


其实URI已经考虑到了这种情况。琢磨后用了这种方式得到了中文路径。


  1. Intent intent2 = getIntent();  
  2. Uri mUri = intent2.getData();  
  3. String path = intent2.getDataString();  
  4. path = Uri.decode(path).substring(7, path.length());  
  5. android.util.Log.d("URI""path is " + path);  
        Intent intent2 = getIntent();
        Uri mUri = intent2.getData();
        String path = intent2.getDataString();
        path = Uri.decode(path).substring(7, path.length());
        android.util.Log.d("URI", "path is " + path);

Uri.decode函数Google已经帮我们实现好了。只是我这个码农没有发现。。。。。。记录于此,供后来人参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值