我应该使用哪种字符编码将字符串下载到文件中,并保留“\ n”?

问题描述 投票:1回答:3

在我的网络应用程序中,我使用此代码将字符串下载到本地光盘上的文件:

void downloadFile(String filename, String text){
    AnchorElement tl = document.createElement('a');
    tl..attributes['href'] = 'data:text/plain;charset=utf-8,' + Uri.encodeComponent(text)
        ..attributes['download'] = filename
        ..click();
}

但这会删除所有换行符(“\ n”)。我需要做些什么来保护它们?

dart
3个回答
1
投票

从Dart 1.14开始,有一个UriData类,它可以更容易地使用data: URI。您可以在这里使用它:

void downloadFile(String filename, String text){
  AnchorElement tl = document.createElement('a');
  var href = UriData.fromString(text, encoding: UTF8);
  tl..attributes['href'] = href.toString()
    ..attributes['download'] = filename
    ..click();

它应确保使用正确的编码来保留换行符。


1
投票

如果文件太大,data: Uri会导致浏览器发出“下载错误”信号。

相反,创建一个临时Blob,仍应保留换行符:

AnchorElement tl = document.createElement('a');
var href = Url.createObjectUrl(new Blob([text]));
tl..attributes['href'] = href
  ..attributes['download'] = filename
  ..click();

0
投票

我无法让“data:text / html”工作(我不是专家),所以我使用“data:text / csv”,并下载一个csv文件。如果用户需要文本文件,他们可以在电子表格中打开并导出。它实际上适合我的目的。

void downloadFile(String filename, String text) {
  text=text.replaceAll('\n','%0A');
  text=text.replaceAll('\t','%2C');
  text="data:text/csv,"+text;
  AnchorElement tl = document.createElement('a');
  tl
  ..attributes['href'] = text
  ..attributes['download'] = filename
  ..click();
}

我会称之为:

String s="one two \n three four \n five\tsix\t 7";
downloadFile('test.csv',s);

如果你:

downloadFile('test.txt',s);

新行和标签被删除。

© www.soinside.com 2019 - 2024. All rights reserved.