如何使用Flutter读取.docx文件?读取时出现utf-8解码错误如何解决?
错误原因
.docx 并非UTF-8编码的纯文本文件,本质是封装了XML结构化内容的ZIP格式二进制压缩包。你直接调用 File.readAsString() 方法会默认按UTF-8编码解码二进制内容,必然会触发 FileSystemException: Failed to decode data using encoding 'utf-8' 异常。
修正方案
- 替换读取逻辑为读取二进制字节,同时可限制文件选择器仅筛选docx文件,减少无效输入
修改后的代码示例:
import 'dart:typed_data'; // 原有业务逻辑位置 FilePickerResult? result = await FilePicker.platform.pickFiles( type: FileType.custom, allowedExtensions: ['docx'], // 限制仅可选择docx后缀文件 ); if (result != null) { try { File file = File(result.files.first.path!); // 读取文件二进制字节,而非直接读取为字符串 Uint8List docxBytes = await file.readAsBytes(); // 后续使用docx解析库处理字节数据即可 } catch(e) { log(e.toString()); } }
- 选择Dart生态的第三方docx处理库解析拿到的二进制数据,无需手动处理ZIP解压、XML解析逻辑,主流库均支持直接提取文本、表格、样式等内容,可满足绝大多数数据处理需求。
仅临时测试时可手动解压docx文件,读取压缩包内word/document.xml文件内容后提取标签内的文本,该方式容错性极低,不推荐正式环境使用。
内容的提问来源于stack exchange,提问作者Egor Grischenkov
相关产品推荐
相关产品推荐

