Java replaceAll失效:Android中JSON文件URL空格转%20失败
解决Android中JSON带空格文件名的转义问题
我懂你遇到的麻烦了——JSON里的PDF文件名带空格,浏览器能自动转成%20,但在Android里直接用就出问题,手动用replaceAll又没达到预期效果对吧?
给你两个靠谱的解决方案,比手动替换空格靠谱多了:
方法一:用URLEncoder做标准URL编码
Android自带的URLEncoder类会按照URL编码规则处理所有需要转义的字符,不只是空格,能避免遗漏其他特殊字符的情况。代码示例:
// 从JSON中取出原始文件名 String originalPdfName = hit.getString("img"); try { // 以UTF-8编码格式处理,这是URL编码的标准格式 String encodedPdfName = URLEncoder.encode(originalPdfName, "UTF-8"); // 接下来就用这个编码后的文件名去构建请求或者访问资源 } catch (UnsupportedEncodingException e) { // 捕获编码异常,实际开发里可以加个日志或者默认处理 e.printStackTrace(); }
方法二:用Uri.encode()快速编码
如果只是简单处理文件名的转义,Uri.encode()也是个不错的选择,代码更简洁:
String originalPdfName = hit.getString("img"); String encodedPdfName = Uri.encode(originalPdfName);
为什么不推荐手动replaceAll?
replaceAll(" ", "%20")只能处理空格这一种情况,但文件名里可能还藏着其他需要转义的特殊字符(比如&、=、+这些),系统自带的编码工具会严格按照URL规则处理所有特殊字符,稳定性和兼容性都更强。
如果是访问本地文件的话,其实空格不需要转义,直接用原始文件名就可以;但如果是作为网络请求的参数或路径的一部分,一定要做标准的URL编码哦。
内容的提问来源于stack exchange,提问作者Dipak
相关产品推荐
相关产品推荐

