2012-01-03 6 views
1

gzipファイルを作成する簡単な機能があります。この関数はうまく動作し、ユニットテストに合格します。それからamazon s3で生成されたファイルをホストしました。GZipStreamが無効なキャラセットを作成

しかし、入力値にユニコード文字が含まれていると、無効な文字が生成されます。

など。アームバンド&ケース>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

いつ/どこで無効な文字が検出されますか?残りのテキストはOKですか? –

+0

クローム開発者用ツールに表示されています。これは修正されています。答えについての私のコメントを参照してください。 Thx – Kuroro

答えて

3

gzip圧縮の出力がないがテキストであることをを意味しています。それは事実上UTF-16でエンコードされたテキストです。元のバイナリコンテンツに展開するだけです。 gzipファイルをテキストファイルとして読み込むことはできません。

GZip自体は、与えられた(バイナリ)データを解釈しません。圧縮するだけなので、後で忠実に圧縮解除することができます。 GZipは、それがテキスト、画像、サウンドファイルなのかどうかはそれほど気にすることはできませんでした。

+0

Thx。 utf-8のテキストをエンコードして、Content-Type:application/jsonを指定して取得しました。応答:charset = utf-8 – Kuroro

+0

@Kuroro:Webレスポンスの場合は、上のレイヤ(IISなど)で圧縮を実行してみましょう。アプリケーションレベルでそれを行う理由はありません。 –

+0

pre-gzipファイルはamazonクラウドフロントでホストされます。クラウドフロントはgzipをその場でサポートしていないので、私はそれを前処理する必要があります。 – Kuroro

関連する問題