2016-09-27 47 views
1

我想在Dart中壓縮一個字符串(在瀏覽器中)。我嘗試這樣做:如何在Dart中使用GZip或類似的方法壓縮字符串?

import 'package:archive/archive.dart'; 

[...] 

List<int> stringBytes = UTF8.encode(myString); 
List<int> gzipBytes = new GZipEncoder().encode(stringBytes); 
String compressedString = UTF8.decode(gzipBytes, allowMalformed: true); 

顯然UTF8.decode不適用於這一點,它不工作(文件無法讀取)。

在Dart中壓縮字符串的正確方法是什麼?

+0

你想達到什麼目的?我的意思是你想用壓縮的字符串做什麼*你可以發佈更多的代碼,包括寫入文件嗎? –

+1

https://pub.dartlang.org/packages/archive –

+0

@GünterZöchbauer是的,這就是我使用的 –

回答

3

字節的壓縮列表可能不是有效的UTF8序列,而是您可以使用base64編碼它。

import 'dart:convert'; 
import 'package:archive/archive.dart'; 

main() { 
    String myString = 'myString'; 
    List<int> stringBytes = UTF8.encode(myString); 
    List<int> gzipBytes = new GZipEncoder().encode(stringBytes); 
    String compressedString = BASE64.encode(gzipBytes); 

    print(compressedString); 
} 
+0

或者只是從原始壓縮字節創建一個下載文件 –

+0

@ArgentiApparatus Dart的'Uri.encodeComponent'方法需要準備一個在瀏覽器中下載的文件,它需要一個字符串而不是一個字節列表。 –

+1

我明白了。所以如果你用來動態創建一個下載文件的方法*必須*處理一個字符串,你可以按照上面的答案BASE64對數據字節進行編碼,注意它會增加下載的大小。 –

相關問題