代码之家  ›  专栏  ›  技术社区  ›  Chris

ASP.NET特殊字符问题

  •  0
  • Chris  · 技术社区  · 16 年前

    我正在ASP.NET中构建一个自动RSS提要,撇号和连字符的出现呈现出非常奇怪的效果:

    我已经设法避免了磅符号()的类似问题,方法是转义符号和并为其构建HTML转义 £ 手动操作,如以下摘录所示:

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

    ’ 在屏幕上。

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

    数据库中的字符串(SQL2005)出于所有目的似乎都是纯文本的——有人能告诉我们为什么看起来是纯文本的字符串总是以这种方式出现,以及是否有人对如何解决撇号问题有任何想法,我们将不胜感激。

    [编辑]

    在Vladimir的帮助下,现在的问题似乎是,在数据库和加载到字符串var中的数据之间的某个地方,数据正在从撇号转换为 -以前有没有人见过这种情况,或者有什么建议?

    4 回复  |  直到 16 年前
        1
  •  1
  •   devstuff    16 年前

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

    我建议将此列(任何其他可能包含非ASCII数据的列)更改为 nvarchar(N) , nchar(N) nvarchar(max) 然后,它可以包含任何Unicode代码点,而不仅仅是由代码页定义的代码点。

    nvarchar / nchar 专门用于避免这些类型的编码问题。Unicode字段使用了两倍的存储空间,但如果使用这种技术,性能差异将非常小(SQL引擎在内部使用Unicode)。

        2
  •  0
  •   Chris    16 年前

        3
  •  0
  •   Torbjörn Hansson    16 年前

    假设您从数据库中获取Unicode字符,最简单的方法是让System.Xml.dll通过在RSS提要中附加一个XmlDocument对象来处理转换(我不确定rss提要中的元素。)

            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)
                )
            );
    
        4
  •  -1
  •   Vladimir Kocjancic    16 年前

    我会把“这是一个测试”放在CDATA标记中。很简单,很有效。

    <![CDATA[Here's a test]]>
    
    推荐文章