设置:我有一个用asp.net/c#构建的表单,在提交时,XML序列化它的对象模型并使用该XML序列化数据作为唯一参数调用存储过程。存储过程将该数据发送到sql代理队列。发送到代理队列的消息必须是符合队列上设置的消息协定的有效XML。该消息由BizTalk接收并相应处理。
问题:最初提交给我的数据只是普通的英文字符(基本上是ASCII字符集),但是还有一个要求就是支持外来字符。在我的测试中,我注意到如果我尝试提交带有外来字符(中文,阿拉伯语等)的内容,我会在队列中收到错误,并且获得BizTalk的消息最终会以“?????”结束代替外国人物。我已将utf = 16 xml标题添加到文档的顶部,但这似乎没有帮助。
问题:有没有办法可以将传入的XML消息转换为nvarchar,并且仍然可以将其视为队列中的有效XML?我不想更改队列上的实际类型或重新创建它。我更喜欢以某种方式改变存储过程中的消息,允许它进入队列。
提前感谢您的帮助。
答案 0 :(得分:0)
我最后通过使用HTML5对字符进行编码然后安全性转义它来处理这个问题。我遇到了一些问题,使用HttpUtility库来处理这种编码,所以我添加了用于处理编码的方法。
我希望我可以直接归功于此,我不记得我在哪里找到了这个,但是谢谢你的任何人:
private string EncodeToHTML(string text)
{
// call the normal HtmlEncode first
char[] chars = HttpUtility.HtmlEncode(text).ToCharArray();
StringBuilder encodedValue = new StringBuilder();
foreach (char c in chars)
{
if ((int)c > 127) // above normal ASCII
encodedValue.Append("&#" + (int)c + ";");
else
encodedValue.Append(c);
}
return encodedValue.ToString();
}