我正在ASP.NET中构建一个自动RSS源,并且撇号和连字符的出现非常奇怪:
“这是一个测试”呈现为“这是一个测试”
我已设法通过转义&符并手动为£
构建HTML转义来避免与井号(£)类似的问题,如下面的摘录所示:
sArticleSummary = sArticleSummary.Replace("£", "£")
但是以下尝试未能解决撇号问题,我们仍然在屏幕上获取’
。
sArticleSummary = sArticleSummary.Replace("’", "’"")
数据库中的字符串(SQL2005)用于所有意图和目的似乎都是纯文本 - 任何人都可以建议为什么看起来像纯文本字符串不断出现这种方式,如果有人对如何有任何想法解决那个值得赞赏的撇号问题。
感谢您的帮助。
[编辑]
除了弗拉基米尔的帮助之外,现在看起来好像问题是数据库之间的某处和它被加载到字符串var中,数据从撇号转换为’
- 有人看到过这种情况之前或者有什么指针吗?
由于
答案 0 :(得分:1)
我猜你的SQL 2005数据库中的列被定义为varchar(N)
,char(N)
或text
。如果是这样,转换是由于数据库驱动程序使用与数据库中设置的不同的代码页设置。
我建议将此列(任何可能包含非ASCII数据的其他列)分别更改为nvarchar(N)
,nchar(N)
或nvarchar(max)
,然后可以包含任何Unicode代码点,不仅仅是代码页定义的那些。
我的所有数据库现在都专门使用nvarchar
/ nchar
来避免这些类型的编码问题。 Unicode字段使用两倍的存储空间,但如果使用此技术(SQL引擎在内部使用Unicode),性能差异很小。
答案 1 :(得分:0)
数据(虽然在SQLServer plain中显示)实际上携带一些MS Word特殊字符的透明度。
答案 2 :(得分:0)
假设您从数据库中获取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)
)
);
答案 3 :(得分:-1)
我只是将“这是一个测试”放入CDATA标签中。简单而且有效。
<![CDATA[Here's a test]]>