SharePoint中的内部名称编码
SharePoint中的内部名称编码,sharepoint,Sharepoint,\u x0020\u替换SharePoint内部字段名中的空格,这是一个相当广为人知的知识。在使用SharePoint web services时,这可能是一场噩梦,除非在比较字段名时编写替换规则 我刚刚在一个名为SSL2的字段中发现了另一个“编码异常”。奇怪的是,内部名称以\u x0053\u SL2结尾。我尝试过类似于RRL2的东西,结果显示为\ux0052\uxx0052。由此看来,编码中使用的数字表示该字符的ASCII值。空间同样是\ux0020\ux0 我的问题有两个: 在这种情况下,
\u x0020\u
替换SharePoint内部字段名中的空格,这是一个相当广为人知的知识。在使用SharePoint web services时,这可能是一场噩梦,除非在比较字段名时编写替换规则
我刚刚在一个名为SSL2的字段中发现了另一个“编码异常”。奇怪的是,内部名称以\u x0053\u SL2
结尾。我尝试过类似于RRL2的东西,结果显示为\ux0052\uxx0052
。由此看来,编码中使用的数字表示该字符的ASCII值。空间同样是\ux0020\ux0
我的问题有两个:
SharePoint XML对名称进行编码,因为它希望能够将字段名称用作XML中的属性
您可以使用System.Xml.XmlConvert.EncodeName对您的姓名进行编码您应该使用System.Xml.XmlConvert.DecodeName这是一个秘密):
这是一个老问题,但我想了解这个问题的第一部分,但它没有得到回答,所以这里是 本质上,
SSL2
被编码为\u x0053\u SL2
,因为它类似于“A1模式”excel单元格引用([a-zA-Z]{1,3}[0-9]{1,5}
)。当Sharepoint看到其中一个字符时,它决定需要对第一个字符进行编码
这显然不是标准的XML编码,我不打算提出任何理论来解释为什么会这样做,但希望这至少能解释OP观察到的情况。不起作用。将SSL2放入EncodeName将产生SSL_x005F_x0020_2。不是SharePoint使用的_x0053_SL_x0020_2。它不编码像
这样的unicode字符ỳść
。请看@SalientBrain-answer。你能给我们更多关于这个问题的细节吗?你如何解决这个问题?我也面临同样的问题。
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;
}