Exemplo n.º 1
0
        Encoding GetOutputEncoding(EncodingInformation sourceEncodingInformation)
        {
            var outputEncoding = OutputEncoding;

            if (null != outputEncoding)
            {
                return(outputEncoding);
            }

            switch (OutputBomPolicy)
            {
            case BomPolicy.Never:
                return(Utf8WithoutBom);

            case BomPolicy.CopySource:
                return(sourceEncodingInformation.BomDetected ? Utf8WithBom : Utf8WithoutBom);

            case BomPolicy.CopyUtf8OrForce:
                if (sourceEncodingInformation.Encoding.CodePage == Encoding.UTF8.CodePage && !sourceEncodingInformation.BomDetected)
                {
                    return(Utf8WithoutBom);
                }

                break;

            case BomPolicy.Force:
            default:
                break;
            }

            return(Utf8WithBom);
        }
Exemplo n.º 2
0
        Encoding GetOutputEncoding(EncodingInformation sourceEncodingInformation)
        {
            var outputEncoding = OutputEncoding;

            if (null != outputEncoding)
                return outputEncoding;

            switch (OutputBomPolicy)
            {
                case BomPolicy.Never:
                    return Utf8WithoutBom;
                case BomPolicy.CopySource:
                    return sourceEncodingInformation.BomDetected ? Utf8WithBom : Utf8WithoutBom;
                case BomPolicy.CopyUtf8OrForce:
                    if (sourceEncodingInformation.Encoding.CodePage == Encoding.UTF8.CodePage && !sourceEncodingInformation.BomDetected)
                        return Utf8WithoutBom;

                    break;
                case BomPolicy.Force:
                default:
                    break;
            }

            return Utf8WithBom;
        }
Exemplo n.º 3
0
        public async Task <bool> TransformFileAsync(Stream inputStream, Stream outputStream)
        {
            var encoding = await EncodingInformation.DetectEncodingAsync(inputStream).ConfigureAwait(false);

            if (null == encoding)
            {
                throw new Exception("Unknown encoding");
            }

            inputStream.Seek(0, SeekOrigin.Begin);

            using (var inputHash = SHA256.Create())
            {
                using (var outputHash = SHA256.Create())
                {
                    using (var inputFilter = new CryptoStream(inputStream, inputHash, CryptoStreamMode.Read))
                    {
                        using (var outputFilter = new CryptoStream(outputStream, outputHash, CryptoStreamMode.Write))
                        {
                            using (var tr = new StreamReader(inputFilter, encoding.Encoding))
                            {
                                var outputEncoding = GetOutputEncoding(encoding);
                                using (var sw = new StreamWriter(outputFilter, outputEncoding, 4096, true))
                                {
                                    await TransformCoreAsync(tr, sw).ConfigureAwait(false);
                                }
                            }
                        }
                    }

                    // Only return "true" if the files are the same (at least, they have the same SHA-256).
                    return(!inputHash.Hash.SequenceEqual(outputHash.Hash));
                }
            }
        }