GZipStream создать недействительный charaset - PullRequest
1 голос
/ 03 января 2012

У меня есть простая функция для создания файла gzip. Эта функция работает нормально и проходит модульный тест. Затем я разместил сгенерированный файл на amazon s3.

Но он выдает недопустимый символ, когда входное значение содержит символ Unicode.

например. ア ー ム バ ン ド & ケ ー ス> 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();
    }
}

1 Ответ

3 голосов
/ 03 января 2012

Результат сжатия GZip не означает , чтобы быть текстом. Это фактически произвольный двоичный контент, который вы должны использовать только для распаковки его до исходного двоичного контента ... который в вашем случае является текстом в кодировке UTF-16. Вы не должны ожидать, что сможете прочитать файл gzip как текстовый файл.

Сам GZip не интерпретирует предоставленные (двоичные) данные - он просто сжимает их, чтобы впоследствии их можно было достоверно распаковать. GZip не должно волновать, текст это, изображение, звуковой файл, что угодно: он просто делает все возможное, чтобы сжать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...