From c4b4f1593ff8b0ff808f0817f712990411dc0248 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Wed, 28 May 2014 10:13:30 -0700 Subject: [PATCH] Fixing output cache encoding --- .../Filters/OutputCacheFilter.cs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.OutputCache/Filters/OutputCacheFilter.cs b/src/Orchard.Web/Modules/Orchard.OutputCache/Filters/OutputCacheFilter.cs index 3add7b58c..dbba938d6 100644 --- a/src/Orchard.Web/Modules/Orchard.OutputCache/Filters/OutputCacheFilter.cs +++ b/src/Orchard.Web/Modules/Orchard.OutputCache/Filters/OutputCacheFilter.cs @@ -291,9 +291,9 @@ namespace Orchard.OutputCache.Filters { // get contents ApplyCacheControl(_cacheItem, response); - // no cache content available, intercept the execution results for caching - _cachingWriter = new StringWriter(CultureInfo.InvariantCulture); + // no cache content available, intercept the execution results for caching, using the targetted encoding _originalWriter = filterContext.HttpContext.Response.Output; + _cachingWriter = new StringWriterWithEncoding(_originalWriter.Encoding, _originalWriter.FormatProvider); filterContext.HttpContext.Response.Output = _cachingWriter; _completeResponse = CaptureResponse; @@ -389,6 +389,8 @@ namespace Orchard.OutputCache.Filters { filterContext.HttpContext.Response.Output = _originalWriter; string capturedText = _cachingWriter.ToString(); + _cachingWriter.Dispose(); + filterContext.HttpContext.Response.Write(capturedText); return capturedText; } @@ -604,4 +606,16 @@ namespace Orchard.OutputCache.Filters { public ViewDataDictionary ViewData { get; set; } } + public sealed class StringWriterWithEncoding : StringWriter { + private readonly Encoding encoding; + + public StringWriterWithEncoding(Encoding encoding, IFormatProvider formatProvider) + : base(formatProvider) { + this.encoding = encoding; + } + + public override Encoding Encoding { + get { return encoding; } + } + } } \ No newline at end of file