14Aug/07Off
Normalizing And Denormalizing SharePoint Field Names
Frequently, when working with Office, SharePoint, and SharePoint web services, it is necessary to convert between the "normalized" (hex escaped string) version of a field name.
To that end, I found a useful JavaScript tool for normalizing strings into SharePoint's "static name" format.
In .Net, we can simplify this using Regex and Uri.
private static readonly Regex specialCharactersPattern = new Regex("[\\[*($%&)<>!?\\/\"{}\\s+-='@~`#\\\\:;^\\]]", RegexOptions.Compiled); private static readonly Regex encodedCharactersPattern = new Regex("_x00(\\d{2})_", RegexOptions.Compiled); /// <summary> /// Normalizes the name of the SharePoint property name. /// </summary> /// <param name="key">The "human readable" key/property name.</param> /// <returns> /// The string with hex representation in place of special ASCII /// characters. /// </returns> private static string NormalizeSharePointPropertyName(string key) { return specialCharactersPattern.Replace(key, ReplaceSpecialCharacter); } /// <summary> /// Custom match evaluator to replace special characters within the input /// string. /// </summary> /// <param name="match">The pattern match.</param> /// <returns>The formatted version of the string.</returns> private static string ReplaceSpecialCharacter(Match match) { string replacement = string.Format("_x00{0}_", Uri.HexEscape(match.Value[0]).TrimStart('%')); return replacement; } /// <summary> /// Denormalizes the name of the SharePoint property. /// </summary> /// <param name="key">The normalized key/property name (static name).</param> /// <returns> /// The denormalized form of the input string ("human readable" /// with hex patterns replaced). /// </returns> private static string DenormalizeSharePointPropertyName(string key) { return encodedCharactersPattern.Replace(key, DecodeSpecialCharacter); } /// <summary> /// Custom match evaluator to replace the hex characters with special characters. /// </summary> /// <param name="match">The pattern match.</param> /// <returns>The ASCII format of the special character encoded in hex.</returns> private static string DecodeSpecialCharacter(Match match) { int start = 0; string replacement = Convert.ToString( Uri.HexUnescape(Convert.ToString(match.Value[0]), ref start) ); return replacement; }
Download the sample console project to test it out.
SharePointNormalizationConsole.zip (4.35 KB)
