0

我知道这个问题几乎和一个世界一样古老,网络上存在数千个答案,但我仍然找不到我的问题是什么以及为什么字符显示为黑色问号 (�) :(

我们有一个多语言网站,目前支持 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 字符串数组,因此有时以字节为单位的字符串的最后一个字符被翻译为乱码。我仍然没有找到如何正确解决它,但现在,我可以禁用我们的过滤器并且不再有问号。

谢谢大家。

4

2 回答 2

0

如果页面以缺少这些字形的字体呈现,它们将使用占位符呈现。

例如,在我的手机上,您所说的几个正确显示的示例显示给我,其中一些文本带有占位符。

在此处输入图像描述

于 2013-04-22T10:41:39.893 回答
0

我不知道 MS SQL 服务器,但你试过让它使用 UTF-8 编码而不是 latin-1 吗?快速谷歌搜索显示:

DEFAULT CHARACTER SET utf8;
DEFAULT COLLATE utf8_general_ci;

我认为这将是一个比SQL_Latin1_General_CP1_CI_AS.

于 2013-04-22T10:29:15.860 回答