From f20805e56701ab4ec118188891e348efe124694c Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Wed, 21 Feb 2024 22:39:32 +0100 Subject: [PATCH] Fix Json serializer for CSharp data to use UTF-8 text encoding #1994 --- Source/Editor/Managed/ManagedEditor.Internal.cpp | 2 +- Source/Engine/Serialization/JsonSerializer.cs | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Source/Editor/Managed/ManagedEditor.Internal.cpp b/Source/Editor/Managed/ManagedEditor.Internal.cpp index 53c0fbab2..8ee058552 100644 --- a/Source/Editor/Managed/ManagedEditor.Internal.cpp +++ b/Source/Editor/Managed/ManagedEditor.Internal.cpp @@ -204,7 +204,7 @@ DEFINE_INTERNAL_CALL(bool) EditorInternal_SaveJsonAsset(MString* outputPathObj, FileSystem::NormalizePath(outputPath); const StringView dataObjChars = MCore::String::GetChars(dataObj); - const StringAsANSI<> data(dataObjChars.Get(), dataObjChars.Length()); + const StringAsUTF8<> data(dataObjChars.Get(), dataObjChars.Length()); const StringAnsiView dataAnsi(data.Get(), data.Length()); const StringView dataTypeNameObjChars = MCore::String::GetChars(dataTypeNameObj); diff --git a/Source/Engine/Serialization/JsonSerializer.cs b/Source/Engine/Serialization/JsonSerializer.cs index 076e8abe7..076beef7d 100644 --- a/Source/Engine/Serialization/JsonSerializer.cs +++ b/Source/Engine/Serialization/JsonSerializer.cs @@ -15,6 +15,17 @@ using Newtonsoft.Json.Serialization; namespace FlaxEngine.Json { + sealed class StringWriterWithEncoding : StringWriter + { + public override Encoding Encoding { get; } + + public StringWriterWithEncoding(System.Text.StringBuilder sb, IFormatProvider formatProvider, Encoding encoding) + : base(sb, formatProvider) + { + Encoding = encoding; + } + } + partial class JsonSerializer { internal class SerializerCache @@ -37,7 +48,7 @@ namespace FlaxEngine.Json { IsManagedOnly = isManagedOnly; StringBuilder = new StringBuilder(256); - StringWriter = new StringWriter(StringBuilder, CultureInfo.InvariantCulture); + StringWriter = new StringWriterWithEncoding(StringBuilder, CultureInfo.InvariantCulture, Encoding.UTF8); MemoryStream = new UnmanagedMemoryStream((byte*)0, 0); #if FLAX_EDITOR