Flutter中如何去除字符串双引号以生成正确文件路径?
解决文件名双引号去除问题
你的问题出在仅移除了filename=前缀,但未处理字符串前后的双引号,以下是两种可行的解决方法:
方法一:直接替换双引号
在现有代码基础上,添加去除双引号的操作即可:
var a = contentDisposition!.split(";"); debugPrint("eev ${a[1]}"); // filename="ABC Home_2-2-2_12 Jan 2024-12 Jan 2024.pdf" var c = a[1].replaceAll("filename=", ""); var d = c.replaceAll('"', '').trim(); // 先移除所有双引号,再清理首尾空格 var bytes = await consolidateHttpClientResponseBytes(response); String dir = (await getApplicationDocumentsDirectory()).path; File file = File("$dir/$d"); String path = file.path; debugPrint(path); // /data/user/0/com.xxx/xxx/ABC Home_2-2-2_12 Jan 2024-12 Jan 2024.pdf
方法二:正则提取文件名(更健壮)
如果担心文件名包含特殊字符,用正则匹配双引号内的内容更稳妥:
var a = contentDisposition!.split(";"); debugPrint("eev ${a[1]}"); // filename="ABC Home_2-2-2_12 Jan 2024-12 Jan 2024.pdf" // 匹配双引号包裹的内容 RegExp filenameRegex = RegExp(r'"([^"]*)"'); Match? matchResult = filenameRegex.firstMatch(a[1]); var d = matchResult?.group(1) ?? ''; // 提取匹配到的文件名,默认空串防止匹配失败 var bytes = await consolidateHttpClientResponseBytes(response); String dir = (await getApplicationDocumentsDirectory()).path; File file = File("$dir/$d"); String path = file.path; debugPrint(path); // /data/user/0/com.xxx/xxx/ABC Home_2-2-2_12 Jan 2024-12 Jan 2024.pdf
两种方法都能有效去除双引号,方法二更适合处理复杂文件名场景,避免意外情况。
内容的提问来源于stack exchange,提问作者Hoo
相关产品推荐
相关产品推荐

