我从外部系统(SSAS)中提取文本并在ASP 2.0(.NET 4)中的TableCell中显示文本。文本显示为£14,243,123.26(注意英镑符号前面的Â)。
我对此的理解是c#使用UTF-16(SSAS可能与SQL Server相同),而ASP 2.0会将页面显示为UTF-8,这就是正在发生的事情。这里的差异可能导致显示问题。
然而这个问题似乎一般都是在引擎盖下处理的,所以我想知道为什么不在这里?是因为ASP中的许多控件自动编码字符串,而Table控件没有?在表上使用Server.HtmlEncode似乎可行,但我希望在任何地方都不需要这样做。
答案 0 :(得分:2)
UTF-8 / UTF-16转换不应该成为问题。您需要通过诊断和工具准确地追踪出错的地方:
在服务器上,当您获取数据时,转储所涉及的完全字符,如下所示(假设采用适当的Log.Write
方法):
Log.Write("Retrieved string: '{0}' length {1}", text, text.Length);
foreach (char c in text)
{
Log.Write(" Character {0}: U+{1:x4}", c, (int) c);
}
一旦确定问题的确切位置,如果您无法解决问题,可以编辑问题以提供相关信息。
答案 1 :(得分:0)
最可能的原因是您没有将ASP.NET页面的编码设置为UTF-8。
您可以通过在网络浏览器中强制将页面编码设置为UTF-8来检查是否存在此问题。如果它修复了£符号显示,则问题在于您的页面编码设置。
Server.HtmlEncode
修复问题的事实是一个很好的指针,它也是一个错误的页面编码。
问题不在于ASP.NET和c#中的UTF-16和UTF-8之间的不匹配。 Windows和c#在内部使用UTF-16的形式,但这并不能阻止ASP.NET在被问到时发出UTF-8编码的页面。