diff --git a/UICatalog/Scenarios/CharacterMap.cs b/UICatalog/Scenarios/CharacterMap.cs index 435757593..295ce7d09 100644 --- a/UICatalog/Scenarios/CharacterMap.cs +++ b/UICatalog/Scenarios/CharacterMap.cs @@ -403,8 +403,12 @@ class CharMap : ScrollView { if (cursorRow + ContentOffset.Y + 1 == y && cursorCol + ContentOffset.X + firstColumnX + 1 == x && !HasFocus) { Driver.SetAttribute (GetFocusColor ()); } - - Driver.AddRune (new Rune (val + col)); + + if (char.IsSurrogate ((char)(val + col))) { + Driver.AddRune (Rune.ReplacementChar); + } else { + Driver.AddRune (new Rune (val + col)); + } if (cursorRow + ContentOffset.Y + 1 == y && cursorCol + ContentOffset.X + firstColumnX + 1 == x && !HasFocus) { Driver.SetAttribute (GetNormalColor ()); diff --git a/UnitTests/Configuration/RuneJsonConverterTests.cs b/UnitTests/Configuration/RuneJsonConverterTests.cs index 75f5f49e9..cd44c7b9b 100644 --- a/UnitTests/Configuration/RuneJsonConverterTests.cs +++ b/UnitTests/Configuration/RuneJsonConverterTests.cs @@ -26,7 +26,7 @@ public class RunJsonConverterTests { // Act var json = JsonSerializer.Serialize (rune, ConfigurationManager._serializerOptions); var deserialized = JsonSerializer.Deserialize (json, ConfigurationManager._serializerOptions); - + // Assert Assert.Equal (expected, deserialized.ToString ()); } @@ -39,7 +39,8 @@ public class RunJsonConverterTests { [InlineData ("🍎🍎")] [InlineData ("U+FFF1F34E")] [InlineData ("\\UFFF1F34E")] - [InlineData ("\\ud83d")] // not printable + [InlineData ("\\ud83d")] // not printable "high surrogate" + [InlineData ("\\udc3d")] // not printable "low surrogate" [InlineData ("\\ud83d \\u1c69")] // bad surrogate pair [InlineData ("\\ud83ddc69")] // Emoji - Family Unit: