SharePoint中的内部名称编码

时间:2009-10-21 12:55:57

标签: sharepoint

_x0020_取代了SharePoint内部字段名称中的空格,这是一个非常好的宣传知识。使用SharePoint Web服务时,在比较字段名称之前编写替换规则之前,这可能有点噩梦。

我刚刚在名为SSL2的字段中找到了另一个“编码异常”。奇怪的是,内部名称最终为_x0053_SL2。我尝试过像RRL2那样的_x0052_。由此看来,编码中使用的数字表示该字符的ASCII值。空间同样是_x0020_

我的问题有两个:

  1. 在这种情况下,是什么导致SharePoint对这些进行编码 字符。

  2. 从广义上讲,正在进行什么样的编码,是否有一般性     我可以做一下解码字符串     而不是取代具体的     我遇到的事情     并且知道是个问题。

4 个答案:

答案 0 :(得分:8)

您应该使用System.Xml.XmlConvert.DecodeName

答案 1 :(得分: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;
}

答案 2 :(得分:1)

这是一个古老的问题,但我想理解这个问题的第一部分而且没有回答,所以这里有......

基本上SSL2被编码为_x0053_SL2,因为它类似于" A1模式" excel单元格引用([a-zA-Z]{1,3}[0-9]{1,5})。当Sharepoint看到其中一个决定需要对第一个字符进行编码时。

这显然不是标准的XML编码,我不会提出任何关于为什么要这样做的理论,但希望这至少可以解释OP观察到的内容。

答案 3 :(得分:0)

SharePoint XML对名称进行编码,因为它希望能够将字段名称用作XML中的属性。

您可以使用System.Xml.XmlConvert.EncodeName对您的名称进行编码