public static string EscapePartitionKey()

in src/DurableTask.AzureStorage/Tracking/KeySanitation.cs [29:87]


        public static string EscapePartitionKey(string key)
        {
            if (key == null)
            {
                return null;
            }

            StringBuilder b = new StringBuilder();
            foreach (char c in key)
            {
                switch (c)
                {
                    case escapeChar:
                        b.Append(escapeChar); 
                        b.Append(escapeChar);
                        break;

                    case '/':
                        b.Append(escapeChar);
                        b.Append('0');
                        break;

                    case '\\': 
                        b.Append(escapeChar);
                        b.Append('1'); 
                        break;

                    case '#': 
                        b.Append(escapeChar); 
                        b.Append('2'); 
                        break;

                    case '?': 
                        b.Append(escapeChar); 
                        b.Append('3');
                        break;

                    default:
                        {
                            uint val = (uint)c;

                            if (val <= 0x1F || (val >= 0x7F && val <= 0x9F))
                            {
                                // characters in this range cannot be used, so we escape them 
                                b.Append(escapeChar);
                                // and shift them into a valid (unicode) range
                                b.Append((char) (offset + val));
                            }
                            else
                            {
                                b.Append(c);
                            }

                            break;
                        }
                }
            }
            return b.ToString();
        }