我有一个字节数组,文本是xml,带有" Hei"。我做了
var bodyText = Encoding.UTF8.GetString(transportMessage.Body);
var bodyXml = XElement.Parse(bodyText);
获取字符串将表情符号编码为&# xD83D;&#x DE0A;
,以便XElement.Parse抛出:
System.InvalidOperationException:生成XML文档时出错。 ---> System.ArgumentException:代理对(0xD83D,0x27)无效。高代理字符(0xD800 - 0xDBFF)必须始终与低代理字符(0xDC00 - 0xDFFF)配对。
我如何删除此表情符号(或任何其他)我尝试使用带有无效xml字符[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]
的正则表达式但它与该表情符号不匹配。
答案 0 :(得分:0)
我使用此代码删除了这个:
private static readonly Regex EmojiRegex = new Regex("&#x?[A-Fa-f0-9]+;");
private static string ReplaceInvalidXmlCharacterReferences(string input)
{
if (input.IndexOf("&#") == -1)
return input;
return EmojiRegex.Replace(input, match =>
{
string ncr = match.Value;
uint num;
var frmt = NumberFormatInfo.InvariantInfo;
bool isParsed =
ncr[2] == 'x' ? // the x must be lowercase in XML documents
uint.TryParse(ncr.Substring(3, ncr.Length - 4), NumberStyles.AllowHexSpecifier, frmt, out num) :
uint.TryParse(ncr.Substring(2, ncr.Length - 3), NumberStyles.Integer, frmt, out num);
return isParsed && !XmlConvert.IsXmlChar((char)num) ? "" : ncr;
});
}