Если вы сталкивались с написанием CAML запросов для Sharepoint 2010 то знаете, что обращение к столбцам с русскими именами достаточно затруднительно т.к. если столбец создавался изначально с русским именем то его внутреннее имя будет выводиться закодированным значением. Например если вы назвали свой столбец "Столбец" то его внутренним именем будет : _x0421__x0442__x043e__x043b__x0431__x0435__x0446_.
Я часто сталкиваюсь с такой белибердой и выяснил что это на самом деле HEX значение Unicode символов окруженные _х и _ . Вооружившись этим знанием я написал две функции для преобразования строки туда и обратно:
public static class NameConverter
{
/// <summary>
/// Расшифровать имя из внутреннего представления
/// </summary>
/// <param name="val">Закодированое имя</param>
/// <returns>Расшифрованое значение</returns>
public static string DecodeName(string val)
{
val = val.Replace("ows", "");
if (!val.Contains("_x")) return val;
var sb = new StringBuilder();
val = val.Replace("_", "");
var parts = val.Split(new[] { 'x' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string part in parts)
{
int v = int.Parse(part, NumberStyles.HexNumber);
var c = (char)v;
sb.Append(c);
}
return sb.ToString();
}
/// <summary>
/// Закодировать русскую строку
/// </summary>
/// <param name="name">Имя для кодирования</param>
/// <returns>Закодированое значение</returns>
public static string EncodeName(string name)
{
var sb = new StringBuilder();
for (int i = 0; i < name.Length; i++)
{
sb.AppendFormat("_x{0:x4}_", (int)name[i]);
}
return sb.ToString();
}
}