You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:24:04