Я часто сталкиваюсь с такой белибердой и выяснил что это на самом деле 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(); } }
К сожалению Sharepoint 2010 хранит русские имена в усеченном варианте. Если имя оканчивается на _x40 значит оно усечено.
ОтветитьУдалить