2016-09-27 3 views
1

Я хочу сжать строку в Dart (в браузере). Я попытался это:Как сжать строку с помощью GZip или аналогичного в Dart?

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, как в приведенном выше ответе, обратите внимание, что это немного увеличит размер вашей загрузки. –

Смежные вопросы