ASP.NET特殊字符的问题

问题描述:

我在构建ASP.NET自动化的RSS提要,并出现撇号和连字符的渲染很奇怪:ASP.NET特殊字符的问题

“这是一个测试”被渲染为“Here’ SA试验”

我已设法通过逸出符号并手动构建HTML逃逸为£规避以井号(£)一个类似的问题,如下面所述提取物显示在:

sArticleSummary = sArticleSummary.Replace("£", "£") 

但以下尝试未能解决撇号问题,我们仍然在屏幕上获得’

sArticleSummary = sArticleSummary.Replace("’", "’"") 

数据库(SQL2005)的所有意图和目的的字符串看起来是纯文本 - 任何人都可以提出建议,为什么它看上去那样是纯文本字符串一直以这种方式出来,如果任何人有任何想法至于如何解决这个值得赞赏的撇号问题。

感谢您的帮助。

[编辑]

继弗拉基米尔的帮助下,现在看起来好像问题在于某处数据库之间,它被加载到字符串VAR的数据从一个撇号转换为’ - 谁看见这发生在或有任何指针?

感谢

我猜你的SQL 2005数据库中的列被定义为varchar(N),char(N)text。如果是这样,转换是由于数据库驱动程序使用与数据库中设置的代码页设置不同的代码页设置。

我建议改变这个柱(任何任何其他可能包含非ASCII数据)nvarchar(N)nchar(N)nvarchar(max)分别,然后可以包含任何Unicode码点,而不仅仅是那些由代码页中定义。

我的所有数据库现在都专门使用nvarchar/nchar来避免这些类型的编码问题。 Unicode字段使用两倍的存储空间,但如果使用此技术(SQL引擎在内部使用Unicode),则性能差异很小。

+0

我们会放弃这一点 - 列确实是varchar。 – Chris 2009-11-06 09:57:27

我只想把“这是一个测试”到CDATA标签。简单而有效。

<![CDATA[Here's a test]]> 
+0

感谢 - 只是测试,它必须输入字符串填充与A€™,而不是单引号,因为你的例子有硬编码的效果很好,但一旦变种仍在使用,它呈现为' – Chris 2009-11-06 09:25:14

发现数据(虽然在SQLServer平台中显示)实际上携带了一些MS Word特殊字符。

+0

您将更好地处理数据,而不是尝试修补它。如果从Word文档导入的话,可能会导致大量问题,因此您必须处理所有这些问题。 – devstuff 2009-11-06 09:58:28

+0

谢谢 - 我们一定会在输入表单中添加一个消毒器 - 单词C&P一直是这样或那样的头痛。 – Chris 2009-11-06 10:00:57

+0

仅供参考:大多数体面的基于JavaScript的所见即所得的编辑器都有一个“从Word粘贴”功能以去除Word中的内容,因此它们可能适合您的输入场景(或将算法提升到服务器端)。 – devstuff 2009-11-06 10:15:51

假设你从数据库中得到了Unicode字符,最简单的方法是让System.Xml.dll负责为你添加一个XmlDocument对象的RSS-feed。 (我不确定rss-feed中的元素。)

 XmlDocument rss = new XmlDocument(); 
     rss.LoadXml("<?xml version='1.0'?><rss />"); 
     XmlElement element = rss.DocumentElement.AppendChild(rss.CreateElement("item")) as XmlElement; 
     element.InnerText = sArticleSummary; 

或Linq。XML:

 XDocument rss = new XDocument(
      new XElement("rss", 
       new XElement("item", sArticleSummary) 
      ) 
     );