【发布时间】:2011-10-25 23:27:06
【问题描述】:
我在 maxpavlov.com 上运行一个 ASP.NET WebForms blog engine 网站
我在博客上主要用俄语写作。有时,即使我正在写一个完全正常的俄语字符,当我查看生成的博客文章页面时,我会得到一些符号替换为 �� 字符。
我开始挖掘。首先,我检查了是否在 web.config 的全球化部分中将 UTF-8 设置为响应编码。一直都是。然后我注意到,我的网站生成的页面没有在页眉中提供<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 属性。所以我将它添加到两个母版页(显示页和管理员页 - 这是 blogengine.net 的特定内容)。
现在 Web 服务器生成的所有页面的字符集值都设置为 UTF-8,但问题仍然存在。
当我创建博客文章时,该站点将其保存到 XML 文件中,该文件还在 XML 文件的顶部设置了一个编码为 UTF-8,其中包含以下行:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
当我访问我的网站时,浏览器中仍会出现问题字符。
我还应该在哪里解决这个编码问题?
更多信息:Fiddler 告诉我响应头 Content-Type: text/html; charset=utf-8
有趣的是,在不同的浏览器中,HTTP 响应中的不同字符会被替换为 �。
【问题讨论】:
-
我不做 ASP.NET,所以我不会详细介绍,但我可以看出,当页面通过 HTTP 提供
Content-Type时,元标记被忽略标头已在 HTTP 响应上设置(与您的站点一样)。只有当页面被客户端保存到本地磁盘然后从它打开时才会使用它。您的问题是仅针对特定字符还是针对所有(非 ISO-8859)字符? -
随机字符会发生这种情况,但仅适用于西里尔字母。
-
您可以使用 Fiddler (fiddler2.com/fiddler2) 检查通过网络发送的内容。查看 HTTP 标头和正文的实际字节以确定使用的编码。这不会向您显示问题的根源,但您应该更好地了解正在发生的事情。
-
我们在使用西里尔符号(ASP.NET MVC 4、IIS 7)时遇到了同样的问题。
-
@vorou,你有没有解决过这个问题。
标签: asp.net iis character-encoding