Fix Json serializer for CSharp data to use UTF-8 text encoding

#1994
This commit is contained in:
Wojtek Figat
2024-02-21 22:39:32 +01:00
parent fa606ce5f6
commit f20805e567
2 changed files with 13 additions and 2 deletions

View File

@@ -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);

View File

@@ -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