我知道这个问题几乎和一个世界一样古老,网络上存在数千个答案,但我仍然找不到我的问题是什么以及为什么字符显示为黑色问号 (�) :(
我们有一个多语言网站,目前支持 10 种语言。某些字符显示不正确(ве��сией,联合国���际)。非拉丁语言中的常规字符可能会发生这种情况,换句话说,在同一页面上,相同的字符可以正确显示。在拉丁语言中,所有特殊字符和常规字符都能正确显示。
我尝试使用编码,但是当它在一个地方解决问题时,问题出现在另一个地方。
在这里,我的编码是如何配置的:
1) 在 MS SQL Server 中,我们使用 NVARCHAR(MAX) 列和SQL_Latin1_General_CP1_CI_AS
排序规则。
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 -> ASP.NET -> 浏览器的方式,但经过大量调试,我发现问题出在方式上,输出如何写入HttpContext.Current.Response.Filter
....we有我们的自定义过滤器,不知何故,缓冲区(byte[]
)传递给过滤器的Write方法。它损坏了 Unicode 字符串数组,因此有时以字节为单位的字符串的最后一个字符被翻译为乱码。我仍然没有找到如何正确解决它,但现在,我可以禁用我们的过滤器并且不再有问号。
谢谢大家。