2012-01-03 2 views
1

gzip 파일을 만드는 간단한 기능이 있습니다. 이 함수는 잘 작동하고 단위 테스트를 통과합니다. 그런 다음 아마존 s3에서 생성 된 파일을 호스팅했습니다.GZipStream에서 잘못된 charaset을 만듭니다

그러나 입력 값에 유니 코드 문자가 포함되어 있으면 잘못된 문자가 생성됩니다.

예. ア ー ム バ ン ド & ケ ー ス> 9ÎvøS ‰

public static void CompressStringToFile(string fileName, string value) 
{ 

    // Use GZipStream to write compressed bytes to target file. 
    using (FileStream f2 = new FileStream(fileName, FileMode.Create)) 
    using (GZipStream gz = new GZipStream(f2,CompressionMode.Compress, false)) 
    { 
     byte[] b = Encoding.Unicode.GetBytes(value); 
     gz.Write(b, 0, b.Length); 
     gz.Flush(); 
    } 
} 
+0

언제/어디에서 잘못된 문자를 감지합니까? 나머지 텍스트는 괜찮습니까? –

+0

Chrome 개발자 도구에서 확인 할 수 있습니다. 수정되었습니다. 답변에 대한 내 의견을 참조하십시오. Thx – Kuroro

답변

3

GZIP 압축의 출력하지 텍스트로을 의미한다. 이것은 실질적으로 임의의 바이너리 컨텐츠이므로 에만 압축을 풀어 원래 바이너리 컨텐츠에 압축을 풉니 다 ... 귀하의 경우 UTF-16 인코딩 텍스트입니다. gzip 파일을 텍스트 파일로 읽을 수 있어야합니다.

GZip 자체는 주어진 바이너리 데이터를 해석하지 않습니다. 단지 압축하므로 나중에 나중에 압축을 풀 수 있습니다. GZip은 텍스트인지, 이미지인지, 사운드 파일인지 여부는 신경 쓰지 않습니다. 압축하는 것이 최선입니다.

+0

Thx. utf-8의 텍스트를 인코딩하고 Content-Type : application/json을 지정하면됩니다. 응답에서 charset = utf-8 – Kuroro

+0

@Kuroro : 웹 응답의 경우 위의 계층 (예 : IIS)에서 압축을 수행하도록하지 않는 이유는 무엇입니까? 응용 프로그램 수준에서 수행 할 이유가 없습니다. –

+0

pre-gzip 파일은 아마존 클라우드 프론트에서 호스트합니다. 클라우드 프론트는 gzip을 즉시 지원하지 않으므로 사전 처리해야합니다. – Kuroro

관련 문제