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

Angular 4导出Base64编码字符串到文件时出现乱码问题求助

解决Angular 4中Base64字符串写入文件乱码的问题

我来帮你搞定这个乱码问题!先看一下你的Base64字符串data:text/plain;base64,SEkNCndlbGNvbWUgdG8gQW5ndWxhciEh,其实它解码后是完全正确的内容:

HI
welcome to Angular!!

出现乱码的核心原因是写入文件时编码格式不匹配,或者处理Base64的流程有误。下面给你一步步的解决方案:


1. 正确处理Base64字符串(剥离前缀+解码)

首先要把data:text/plain;base64,这个前缀去掉,只保留纯Base64编码部分,再用正确的方式解码:

// 你的原始Base64 URI
const base64Uri = 'data:text/plain;base64,SEkNCndlbGNvbWUgdG8gQW5ndWxhciEh';
// 拆分出纯Base64编码内容
const pureBase64 = base64Uri.split(',')[1];
// 解码Base64为字符串
const decodedText = window.atob(pureBase64);

2. 用UTF-8编码创建Blob并写入文件

直接把解码后的字符串传入Blob可能会因为浏览器默认编码问题导致乱码,建议先转成Uint8Array,再明确指定UTF-8编码创建Blob:

// 将解码后的字符串转换为Uint8Array
const uint8Array = new Uint8Array(decodedText.length);
for (let i = 0; i < decodedText.length; i++) {
  uint8Array[i] = decodedText.charCodeAt(i);
}

// 创建指定UTF-8编码的Blob
const blob = new Blob([uint8Array], { type: 'text/plain;charset=utf-8' });

// 触发文件下载(Angular中可以用这种方式实现)
const downloadUrl = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = downloadUrl;
link.download = 'result.txt'; // 自定义文件名
document.body.appendChild(link);
link.click();

// 清理资源
window.URL.revokeObjectURL(downloadUrl);
document.body.removeChild(link);

3. 检查你的Base64生成代码(确保源头正确)

顺便确认下你的Base64生成逻辑是否正确,正确的生成方式应该是这样的(和你提供的编码结果一致):

const originalContent = 'HI\nwelcome to Angular!!';
// 用TextEncoder转成Uint8Array,保证UTF-8编码
const encoder = new TextEncoder();
const encodedArray = encoder.encode(originalContent);
// 转成Base64字符串
const base64Str = btoa(String.fromCharCode(...encodedArray));
// 加上data URI前缀就是你提供的字符串
const dataUri = `data:text/plain;base64,${base64Str}`;

这样处理后,写入文件的内容就会和你期望的HI\nwelcome to Angular!!完全一致,不会出现乱码了。

内容的提问来源于stack exchange,提问作者Santhosh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:43:44