如何转换onActivityResult获取的编码字符串文件路径格式?
解决MIUI Gallery路径的URL编码转换问题
你当前获取到的路径是经过URL编码的,其中%2F是斜杠/的URL转义字符,只需要对编码部分进行解码即可得到目标格式。以下是两种可行的实现方式:
方法一:使用URLDecoder直接解码
通过拆分路径,对编码的部分单独解码后重新拼接:
String encodedPath = "content://com.miui.gallery.open/raw/%2Fstorage%2Femulated%2F0%2FDCIM%2FScreenshots%2Ffilename.jpg"; // 按/raw/分割路径,保留前缀和编码部分 String[] pathSegments = encodedPath.split("/raw/", 2); if (pathSegments.length == 2) { try { // 解码编码部分 String decodedSegment = URLDecoder.decode(pathSegments[1], "UTF-8"); // 拼接成目标路径 String targetPath = pathSegments[0] + "/raw/" + decodedSegment; // 此时targetPath即为所需格式:content://com.miui.gallery.open/raw/storage/emulated/0/DCIM/Screenshots/filename.jpg } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }
方法二:利用Uri类构建目标路径
借助Android的Uri工具类解析并重新构建路径:
String encodedPath = "content://com.miui.gallery.open/raw/%2Fstorage%2Femulated%2F0%2FDCIM%2FScreenshots%2Ffilename.jpg"; Uri originalUri = Uri.parse(encodedPath); String rawEncodedSegment = originalUri.getLastPathSegment(); try { String decodedSegment = URLDecoder.decode(rawEncodedSegment, "UTF-8"); // 重新构建Uri Uri targetUri = new Uri.Builder() .scheme(originalUri.getScheme()) .authority(originalUri.getAuthority()) .appendPath("raw") .appendEncodedPath(decodedSegment) .build(); String targetPath = targetUri.toString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }
注意:如果你的目标路径中Screenshot是笔误(原路径为Screenshots),无需额外处理;若确实需要修改文件夹名称,可在解码后添加字符串替换逻辑。
内容的提问来源于stack exchange,提问作者Matrix
相关产品推荐
相关产品推荐

