_x0020_
取代了SharePoint内部字段名称中的空格,这是一个非常好的宣传知识。使用SharePoint Web服务时,在比较字段名称之前编写替换规则之前,这可能有点噩梦。
我刚刚在名为SSL2的字段中找到了另一个“编码异常”。奇怪的是,内部名称最终为_x0053_SL2
。我尝试过像RRL2那样的_x0052_
。由此看来,编码中使用的数字表示该字符的ASCII值。空间同样是_x0020_
。
我的问题有两个:
在这种情况下,是什么导致SharePoint对这些进行编码 字符。
从广义上讲,正在进行什么样的编码,是否有一般性 我可以做一下解码字符串 而不是取代具体的 我遇到的事情 并且知道是个问题。
答案 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对您的名称进行编码