uni-app iOS端下载文件后出现乱码,打不开

uni-app iOS端下载文件后出现乱码,打不开

操作步骤:

  • 下载文件然后打开

预期结果:

  • 正常打开

实际结果:

  • 提示未找到文件名

bug描述:

系统版本 ios14.6
下载文件中有中文名,下载下来就乱码。
用uni.openDocument 打开就报错,报错信息如下截图

bug截图

信息类别 内容
产品分类 uniapp/App
PC开发环境 Mac
PC开发环境版本 11.4
HBuilderX类型 正式
HBuilderX版本 3.1.18
手机系统 iOS
手机系统版本 iOS 14
手机厂商 苹果
手机机型 iphone11
页面类型 vue
打包方式 云端
项目创建方式 HBuilderX

更多关于uni-app iOS端下载文件后出现乱码,打不开的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

先规范一下你们的文件命名规则吧
你这个文件叫 “扫描全能王 2021-06-18 09.11.pdf” 有中文和空格等特殊字符
另外 openDocument 这个在iOS上 打开路径时 不能有中文
这边还是先规范一下资源的名称 避免中文

更多关于uni-app iOS端下载文件后出现乱码,打不开的实战教程也可以访问 https://www.itying.com/category-93-b0.html


iOS系统中,下载中文文件名时出现乱码是常见问题,通常由编码不匹配导致。在uni-app中,使用uni.downloadFile下载文件时,iOS系统对非ASCII字符(如中文)的文件名支持不佳,可能自动转换为URL编码或其他格式,导致下载后文件名显示异常,进而使uni.openDocument无法正确识别文件路径。

解决方案:

  1. 检查下载URL编码:确保下载链接中的中文文件名经过正确的URL编码(如使用encodeURIComponent()处理),避免iOS系统解析时出错。
  2. 重命名文件:下载后通过代码将文件重命名为英文或数字名称,再调用uni.openDocument。例如:
    uni.downloadFile({
      url: 'https://example.com/文件.pdf',
      success: (res) => {
        if (res.statusCode === 200) {
          const tempPath = res.tempFilePath;
          // 重命名为英文
          const newPath = `${plus.io.PUBLIC_DOWNLOADS}/document.pdf`;
          plus.io.resolveLocalFileSystemURL(tempPath, (entry) => {
            entry.moveTo(plus.io.PUBLIC_DOWNLOADS, 'document.pdf', () => {
              uni.openDocument({ filePath: newPath });
            });
          });
        }
      }
    });
回到顶部