diff --git a/src/Nancy.Tests.Functional/Tests/JsonpTests.cs b/src/Nancy.Tests.Functional/Tests/JsonpTests.cs
index 71e1aca1b5..5ded177276 100644
--- a/src/Nancy.Tests.Functional/Tests/JsonpTests.cs
+++ b/src/Nancy.Tests.Functional/Tests/JsonpTests.cs
@@ -57,7 +57,7 @@ public void Ensure_that_Jsonp_hook_does_not_affect_a_normal_json_response()
Assert.Equal(HttpStatusCode.OK, result.StatusCode);
Assert.Equal("true", result.Body.AsString());
- Assert.Equal("application/json", result.Context.Response.ContentType);
+ Assert.Equal("application/json; charset=utf8", result.Context.Response.ContentType);
}
[Fact]
@@ -71,7 +71,7 @@ public void Ensure_that_Jsonp_hook_should_pad_a_json_response_when_callback_is_p
Assert.Equal(HttpStatusCode.OK, result.StatusCode);
Assert.Equal("myCallback(true);", result.Body.AsString());
- Assert.Equal("application/javascript", result.Context.Response.ContentType);
+ Assert.Equal("application/javascript; charset=utf8", result.Context.Response.ContentType);
}
}
}
diff --git a/src/Nancy.Tests/Unit/JsonFormatterExtensionsFixtures.cs b/src/Nancy.Tests/Unit/JsonFormatterExtensionsFixtures.cs
index 8daa0f1a39..63a8a78c0b 100644
--- a/src/Nancy.Tests/Unit/JsonFormatterExtensionsFixtures.cs
+++ b/src/Nancy.Tests/Unit/JsonFormatterExtensionsFixtures.cs
@@ -1,9 +1,9 @@
namespace Nancy.Tests.Unit
{
- using System;
using System.IO;
using System.Text;
using FakeItEasy;
+
using Nancy.Responses;
using Nancy.Tests.Fakes;
using Xunit;
@@ -25,7 +25,7 @@ public JsonFormatterExtensionsFixtures()
[Fact]
public void Should_return_a_response_with_the_standard_json_content_type()
{
- response.ContentType.ShouldEqual("application/json");
+ response.ContentType.ShouldEqual("application/json; charset=utf8");
}
[Fact]
diff --git a/src/Nancy/Json/JsonSettings.cs b/src/Nancy/Json/JsonSettings.cs
index 2859c8adc8..f9686e74fe 100644
--- a/src/Nancy/Json/JsonSettings.cs
+++ b/src/Nancy/Json/JsonSettings.cs
@@ -18,12 +18,18 @@ public static class JsonSettings
///
public static int MaxRecursions { get; set; }
+ ///
+ /// Default charset for json responses.
+ ///
+ public static string DefaultCharset { get; set; }
+
public static IList Converters { get; set; }
static JsonSettings()
{
MaxJsonLength = 102400;
MaxRecursions = 100;
+ DefaultCharset = "utf8";
Converters = new List
{
new TimeSpanConverter(),
diff --git a/src/Nancy/Jsonp.cs b/src/Nancy/Jsonp.cs
index 3cce184508..2564859863 100644
--- a/src/Nancy/Jsonp.cs
+++ b/src/Nancy/Jsonp.cs
@@ -1,12 +1,12 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Nancy.Bootstrapper;
-using System.IO;
-
-namespace Nancy
+namespace Nancy
{
+ using System;
+ using System.IO;
+ using System.Linq;
+
+ using Nancy.Json;
+ using Nancy.Bootstrapper;
+
public static class Jsonp
{
static PipelineItem> JsonpItem;
@@ -56,7 +56,7 @@ private static void PrepareJsonp(NancyContext context)
// set content type to application/javascript so browsers can handle it by default
// http://stackoverflow.com/questions/111302/best-content-type-to-serve-jsonp
- context.Response.ContentType = "application/javascript";
+ context.Response.ContentType = "application/javascript" + (String.IsNullOrWhiteSpace(JsonSettings.DefaultCharset) ? "" : "; charset=" + JsonSettings.DefaultCharset);
context.Response.Contents = stream =>
{
// disposing of stream is handled elsewhere
diff --git a/src/Nancy/Responses/JsonResponse.cs b/src/Nancy/Responses/JsonResponse.cs
index bb6a603e32..99d8802e40 100644
--- a/src/Nancy/Responses/JsonResponse.cs
+++ b/src/Nancy/Responses/JsonResponse.cs
@@ -6,6 +6,14 @@
public class JsonResponse : Response
{
+ private static string contentType
+ {
+ get
+ {
+ return "application/json" + (String.IsNullOrWhiteSpace(JsonSettings.DefaultCharset) ? "" : "; charset=" + JsonSettings.DefaultCharset);
+ }
+ }
+
public JsonResponse(TModel model, ISerializer serializer)
{
if (serializer == null)
@@ -14,13 +22,13 @@ public JsonResponse(TModel model, ISerializer serializer)
}
this.Contents = GetJsonContents(model, serializer);
- this.ContentType = "application/json";
+ this.ContentType = contentType;
this.StatusCode = HttpStatusCode.OK;
}
-
+
private static Action GetJsonContents(TModel model, ISerializer serializer)
{
- return stream => serializer.Serialize("application/json", model, stream);
+ return stream => serializer.Serialize(contentType, model, stream);
}
}