2009-10-21 3 views
1

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

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

Мой вопрос имеет два аспекта:

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

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

ответ

0

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

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

+0

Не работает. Включение SSL2 в EncodeName происходит с помощью SSL_x005F_x0020_2. Не используется _x0053_SL_x0020_2, который использует SharePoint. –

+0

'SSL 2', который является –

8

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

+1

Спасибо за ответ, это должно быть отмечено как таковое :) – soniiic

+0

Это не кодирует символы Юникода, такие как 'ąłỳść'. Посмотрите на ответ @SalientBrain. – Szel

1

Это секрет):

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; 
} 
1

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

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

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

Смежные вопросы