2016-09-27 1 views
1

다트에서 문자열을 압축하고 싶습니다 (브라우저에서). (파일을 읽을 수)DZT 또는 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로 인코딩하면 다운로드 크기가 다소 증가합니다. –