0
我有一个字节数组,文本是xml与“Hei”。我做如何解决代理对(0xD83D,0x27)无效
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]
但它不匹配的表情符号。
您是否收到的Unicode?如果是这样,那么使用Encoding.Unicode(不是UTF8)。如果你通过html发送XML,那么你必须编码和解码:System.Net.WebUtility.HtmlEncode()和System.Net.WebUtility.HtmlDecode() – jdweng
不,它不是unicode。邮件的其余部分编码正确,只是表情符号很奇怪 – Margo
'GetString'不编码文本,它对它进行解码。如果'GetString'返回包含'��'的文本,则它必须已经以字节数组的方式编码。你能显示字节数组的内容吗?解码后的字符串是否真的包含空格('�&#x DE0A;'而不是'��')? – Codo