【问题标题】:ASP.NET special character problemASP.NET 特殊字符问题
【发布时间】:2009-11-06 09:14:08
【问题描述】:

我正在 ASP.NET 中构建一个自动 RSS 提要,并且出现的撇号和连字符呈现得很奇怪:

“这是一个测试”正在呈现为“这是一个测试”

我已经设法通过转义与号并手动为£ 构建 HTML 转义符来规避与井号 (£) 类似的问题,如下面的摘录所示:

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

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

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

出于所有意图和目的,数据库中的字符串 (SQL2005) 似乎是纯文本 - 任何人都可以告知为什么似乎纯文本字符串以这种方式不断出现,以及是否有人对如何处理有任何想法解决将不胜感激的撇号问题。

感谢您的帮助。

[编辑]

在 Vladimir 的帮助下,现在看起来问题似乎是在数据库和它被加载到字符串 var 之间的某个地方,数据正在从撇号转换为 ’ - 有没有人见过这种情况或有任何指针?

谢谢

【问题讨论】:

    标签: asp.net html vb.net rss


    【解决方案1】:

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

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

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

    【讨论】:

    • 我们试试看 - 列确实是 varchar。
    【解决方案2】:

    表明数据(虽然以 SQLServer 普通格式显示)实际上带有一些 MS Word 特殊字符。

    【讨论】:

    • 您最好正确处理数据,而不是尝试修补它。如果从 Word 文档中导入大量字符可能会导致问题,而您必须处理所有这些字符。
    • 谢谢 - 我们肯定会在输入表单中添加消毒剂 - Word C&P 总是让人头疼。
    • 仅供参考:大多数不错的基于 JavaScript 的 WYSIWYG 编辑器都有“从 Word 粘贴”功能来对内容进行去字化处理,因此它们可能适合您的输入场景(或提升算法执行它是服务器端的)。
    【解决方案3】:

    假设您从数据库中获取 Unicode 字符,最简单的方法是让 System.Xml.dll 为您处理转换,方法是在 RSS 提要中附加一个 XmlDocument 对象。 (我不确定 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)
                )
            );
    

    【讨论】:

      【解决方案4】:

      我只是将“这是一个测试”放入 CDATA 标记中。简单而且有效。

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

      【讨论】:

      • 谢谢 - 刚刚测试过,它必须是输入字符串填充了 ’ 而不是撇号,因为您的示例适用于硬代码,但是一旦使用 var,它仍然呈现为 ’
      猜你喜欢
      • 2011-04-19
      • 2014-02-07
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多