URl用中文去访问是没有问题的,因为android在内部进行了转码。 但是从URL获取文件名的时候,因为android已经转过码,所以得到的就是乱码了。这时候需要用到android提供的方法Uri.decode()获取正确的中文路径。 此方法返回的路径带有:file:// 所以,需要截取一下才能用。


-------------------------------------------------------------------


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

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

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


VideoActivty处的代码大致为:



"/mnt/sdcard/叶问2.mp4";   
  
 
  
1. String type = "video";  
2. File f = new
3. Uri uri = Uri.fromFile(f);  
4. Intent intent = new
5. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
6. intent.setAction(android.content.Intent.ACTION_VIEW);  
7. intent.setDataAndType(uri, type);  
8. 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处理时用了异想天开的转码方式:




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



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



发现无论怎样处理都无法转成中文。通过查看官方文档发现URI把我们的path转成了

RFC 2396格式,不懂啊。。。



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

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已经帮我们实现好了。只是我这个码农没有发现。。。。。。记录于此,供后来人参考。


URl用中文去访问是没有问题的,因为android在内部进行了转码。 但是从URL获取文件名的时候,因为android已经转过码,所以得到的就是乱码了。这时候需要用到android提供的方法Uri.decode()获取正确的中文路径。 此方法返回的路径带有:file:// 所以,需要截取一下才能用。


--------------------------------------------------------------------------------------------

以下是转自:。 谢谢你的贡献

---------------------------------------------------------------------------------------------------------------


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

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

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


VideoActivty处的代码大致为:




"/mnt/sdcard/叶问2.mp4";  

1. String type = "video";  
2. File f = new
3. Uri uri = Uri.fromFile(f);  
4. Intent intent = new
5. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
6. intent.setAction(android.content.Intent.ACTION_VIEW);  
7. intent.setDataAndType(uri, type);  
8. 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处理时用了异想天开的转码方式:




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



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



发现无论怎样处理都无法转成中文。通过查看官方文档发现URI把我们的path转成了

RFC 2396格式,不懂啊。。。



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

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已经帮我们实现好了。只是我这个码农没有发现。。。。。。记录于此,供后来人参考。