Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 我应该使用哪种字符编码将字符串下载到文件中,并保留"\n";?_Dart - Fatal编程技术网

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

Dart 我应该使用哪种字符编码将字符串下载到文件中,并保留"\n";?,dart,Dart,在我的web应用程序中,我使用以下代码将字符串下载到本地光盘上的文件: void downloadFile(String filename, String text){ AnchorElement tl = document.createElement('a'); tl..attributes['href'] = 'data:text/plain;charset=utf-8,' + Uri.encodeComponent(text) ..attributes['d

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

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 1.14开始,有一个类使得使用
数据更加容易:
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();
它应该确保使用正确的编码来保留换行符。

我根本无法使用“数据:文本/html”(我不是专家),所以我使用“数据:文本/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);

换行符和制表符被撕掉。

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

改为创建临时Blob,并应保留换行符:

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

字符编码,如
utf-8
vs
iso-8859-1
等,与换行符的保存关系不大
\n
是符号换行符,可能是0x0a
LF
(换行符)或0x0d
CR
(回车符)或序列0x0d0x0a
CRLF
,具体取决于上下文。重要的是可以转换换行符的文本模式,而二进制模式可以保留字节的原样,我认为这是
UriData
的功能——防止所有字符的重新组合,并按原样显示数据。谢谢。我试过上面的方法。我插入了“new”(var href=new UriData…),但是我该如何处理该对象呢?我尝试了href.contentText、contentAsBytes等,但没有成功。您可以使用
href.uri
获取
uri
对象。相反,您可以使用
Uri.dataFromString
直接创建
Uri
对象,而不是
UriData
对象:
var href=new Uri.dataFromString(字符串,编码:UTF8)。(不需要指定“text/plain”,您应该使用
编码
来指定字符集,而不是使用参数-这对拼写更安全)。我已经更新了我的代码示例,直接使用
编码
。我只是在
UriData
对象上调用
toString()
来获取href。您好,感谢您再次查看,但恐怕这仍然会删除换行符。