我知道这个问题几乎与世界一样古老,网络上存在数千个答案,但我仍然无法找到我的案例中的问题以及为什么字符显示为黑色问号( ):(
我们有一个多语言网站,目前支持10种语言。某些字符显示不正确(ве сией,联合国 际)。它可能发生在非拉丁语言中的常规字符,换句话说,在同一页面上,正确显示相同的字符。在拉丁语言中,所有特殊和常规字符都正确显示。
我尝试使用编码,但在一个地方修复了问题,问题出现在其他地方。
在这里,我的编码如何配置:
1)在MS SQL Server中,我们使用带有SQL_Latin1_General_CP1_CI_AS
校对的NVARCHAR(MAX)列
2)在web应用程序中,在web.config文件中我有:<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
。
3)在页面本身,我们有<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
。
在回复标题中,Chrome会显示:Content-Type:text/html; charset=utf-8
。
我想念的是什么?为什么我仍然会看到那些黑色问号?我应该检查/更改什么才能正确显示所有字符。
由于
更新
我发现了一个问题,它与传输编码完全无关。我认为问题在于编码,以及它如何通过DB - &gt; ASP.NET - &gt;浏览器,但经过大量调试后,我发现问题已经存在,输出如何写入HttpContext.Current.Response.Filter
....我们有自定义过滤器,不知何故,缓冲区(byte[]
)传递给过滤器的Write方法。它已经损坏了Unicode字符串数组,因此有时字符串的最后一个字符串被翻译为乱码。我仍然没有找到如何正确解决它,但是现在,我可以禁用我们的过滤器,并且不再有任何问号。
感谢所有人。
答案 0 :(得分:0)
我不知道MS SQL服务器,但您是否尝试过使用UTF-8编码而不是latin-1?快速Google search显示:
DEFAULT CHARACTER SET utf8;
DEFAULT COLLATE utf8_general_ci;
我认为这比使用SQL_Latin1_General_CP1_CI_AS
更好。
答案 1 :(得分:0)
如果页面呈现的字体缺少这些字形,则会使用占位符进行渲染。
例如,在我的手机上,您说的正确显示的几个示例会显示给我一些文本的占位符。