Внутренняя кодировка имени в SharePoint - PullRequest
2 голосов
/ 21 октября 2009

Общеизвестно, что _x0020_ заменяет пробелы в именах внутренних полей SharePoint.При работе с веб-службами SharePoint это может показаться кошмаром, пока вы не напишите правило замены при сравнении имен полей.

Я только что обнаружил еще одно из этих «исключений кодирования» в поле под названием SSL2.Странно, но внутреннее имя оказывается _x0053_SL2.Я пробовал что-то вроде RRL2, который выходит как _x0052_.Из этого следует, что число, используемое в кодировке, представляет значение ASCII этого символа.Пробел также был бы _x0020_.

Мой вопрос состоит из двух частей:

  1. В этом случае, что заставляет SharePoint кодировать этисимволов.

  2. В общих чертах, какой тип кодирования выполняется, и есть ли общий шаг, который я могу сделать, чтобы декодировать строки, а не заменять определенные вхожденияпопадаются и знают, что это проблема.

Ответы [ 4 ]

8 голосов
/ 20 мая 2010

Вы должны использовать System.Xml.XmlConvert.DecodeName

1 голос
/ 17 апреля 2017

Это старый вопрос, но я хотел понять первую часть этого вопроса, и на него не было ответа, так что ...

По существу, SSL2 кодируется в _x0053_SL2, поскольку оно напоминает ссылку на ячейку Excel "A1 mode" ([a-zA-Z]{1,3}[0-9]{1,5}). Когда Sharepoint видит один из них, он решает, что ему нужно закодировать первый символ.

Это, очевидно, не стандартная кодировка XML, и я не собираюсь выдвигать какие-либо теории относительно того, почему это делается, но, надеюсь, это, по крайней мере, объясняет то, что наблюдал ОП.

1 голос
/ 05 марта 2013

Это секрет):

public static string EncodeName(string name)
{
    var encodedName = string.Empty;
    foreach (var c in name)
    {
        var s = c.ToString();
        byte[] bytes = Encoding.BigEndianUnicode.GetBytes(s);
        //Regex.Match(s, "[^\x00-\x80]")
        //IsCyrillic (0x400–0x4FF) и IsCyrillicSupplement (0x500–0x52F)
        //if (Regex.Match(s, @"\p{IsCyrillic}|\p{IsCyrillicSupplement}").Success)
        if (!Regex.Match(s, @"[a-zA-Z0-9_]").Success)
        {
            encodedName += "_x";
            foreach (var b in bytes)
            {
                encodedName += b.ToString("X2").ToLowerInvariant();
            }
            encodedName += "_";
        }
        else
        {
            encodedName += s;
        }
    }
    if (encodedName.Length > 32)
    {
        encodedName = encodedName.Substring(0, 32);
    }
    return encodedName;
}
0 голосов
/ 22 октября 2009

SharePoint XML кодирует имена, потому что хочет иметь возможность использовать имена полей в качестве атрибутов в XML.

Вы можете использовать System.Xml.XmlConvert.EncodeName для кодирования ваших имен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...