2009-10-21 5 views
1

Il est assez bien connu que _x0020_ remplace les espaces dans les noms de champs internes SharePoint. Lorsque vous travaillez avec des services Web SharePoint, cela peut être un peu un cauchemar jusqu'à ce que vous écriviez une règle de remplacement lors de la comparaison des noms de champs.Codage du nom interne dans SharePoint

Je viens de me trouver une autre de ces "exceptions d'encodage" dans un champ appelé SSL2. Bizarrement le nom interne finit par être _x0053_SL2. J'ai essayé quelque chose comme RRL2 qui sort comme _x0052_. De ceci il apparaît que le nombre utilisé dans l'encodage représente la valeur ASCII de ce caractère. L'espace serait également _x0020_.

Ma question est double:

  1. Dans ce cas, ce qui cause SharePoint pour coder ces caractères.

  2. De façon générale, quel type de codage est fait et est là une étape générale que je peux faire pour décoder les chaînes plutôt que de remplacer spécifiques occurances que j'ai rencontré et savoir être un problème.

Répondre

0

XML SharePoint code noms parce qu'il veut être en mesure d'utiliser les noms des champs comme attributs XML.

Vous pouvez utiliser System.Xml.XmlConvert.EncodeName pour encoder vos noms

+0

Ne fonctionne pas. Mettre SSL2 dans EncodeName sort avec SSL_x005F_x0020_2. Pas le _x0053_SL_x0020_2 que SharePoint utilise. –

+0

'SSL 2' qui est –

8

Vous devez utiliser System.Xml.XmlConvert.DecodeName

+1

Merci pour la réponse, cela devrait être marqué comme tel :) – soniiic

+0

Cela ne code pas les caractères Unicode comme 'ąłỳść'. Regardez la réponse de @SalientBrain. – Szel

1

Il est un secret):

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

C'est une vieille question, mais je voulais comprendre la première partie de cette question et il n'a pas été répondu donc va ici ...

Essentiellement SSL2 est en cours codé à _x0053_SL2 car il ressemble à une référence de cellule Excel "mode A1" ([a-zA-Z]{1,3}[0-9]{1,5}). Lorsque Sharepoint voit un de ceux qu'il décide, il doit encoder le premier caractère. Ceci n'est évidemment pas un codage XML standard, et je ne vais pas poser de théorie quant à la raison pour laquelle cela est fait, mais j'espère que cela explique au moins ce que l'OP a observé.

Questions connexes