using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using System.Linq; using System.Globalization; public class Test { private static bool IsSurrogate(string symbol) { return char.IsSurrogatePair(symbol, 0); } public static void Main() { Dictionary> charInfo = ( Enumerable.Range(0, 0x110000) .Where (x => (x < 0x00D800 || x > 0x00DFFF)) .Select (Char.ConvertFromUtf32) .GroupBy(s => Char.GetUnicodeCategory(s, 0)) .ToDictionary(g => g.Key) ); // Get all number unicode groups: string[] Nd = charInfo[UnicodeCategory.DecimalDigitNumber].ToArray(); string[] Nl = charInfo[UnicodeCategory.LetterNumber ].ToArray(); string[] No = charInfo[UnicodeCategory.OtherNumber ].ToArray(); //Console.WriteLine(string.Join("", Nd)); string[] N = Nd.Union(Nl).Union(No).ToArray(); foreach (var symbol in N) { if (!Regex.IsMatch(symbol, @"\p{N}")) { var chrs = symbol.ToCharArray(); var hex = string.Concat(chrs.Select(x => string.Format(@"\u{0:x4}", (int)x))); Console.WriteLine($"{symbol}\t{hex}\t{char.IsSurrogatePair(symbol, 0)}"); } } } }