【问题标题】:UTF-8 server encoding results in � characters on an ASP.NET siteUTF-8 服务器编码导致 ASP.NET 站点上的字符
【发布时间】: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


【解决方案1】:

顺便说一句,如果有人仍然想知道它是什么 - 它是 IIS Native RewriteModule。即使在版本 2 中也存在问题,如果您为站点禁用它,问题就会消失。试图在 IIS.net 中报告它 - 不相信我。刚学会在需要显示西里尔字符的网站上不使用它。

【讨论】:

  • 这个问题发布已经 9 年了,我仍然无法使用带有西里尔字符的 IIS RewriteModule :( 仍然没有解决方案?
【解决方案2】:

尝试对俄语字母使用Windows-1251(西里尔字母)编码。

【讨论】:

  • 完全搞乱了字符输出。使用 UTF-8 时,似乎只能替换随机字符。同样有趣的是,当我以未登录用户的身份查看该页面时,页面上有一组章程被问号代替,但是当我登录时,不同的区域会受到影响。也许这会给你一个线索。
  • 今天要出去了,但我会考虑一下,并尝试在今晚或明天的某个时间回复您。
  • 以防万一,我收到了一些来自开发人员的类似问题的报告。西里尔文集,同样的问题,大概文字最初来自所见即所得的编辑器。
猜你喜欢
  • 2018-09-22
  • 2011-05-27
  • 2014-12-29
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 2023-03-28
  • 2011-08-16
相关资源
最近更新 更多