我需要为非ASCII字符使用web.config吗?

7
尝试创建我的第一个 ASP.NET 页面。在 XP 上安装了 IIS 5.1,并配置运行 .NET 4。创建了一个新的虚拟目录并添加了一个 .aspx 文件。当我浏览该文件时,非 ASCII 字符会出现乱码。例如,ü(U+00FC)会转换为 ü(U+00C3 U+00BC),这是“我不知道这是 UTF-8” 的等效方式。 我尝试了以下几种方法: 1. 确保 .aspx 文件确实以 UTF-8 编码。 2. 设置 meta 标签: 3. 在 IIS 的 HTTP Headers > File Type 中将虚拟目录处理 .aspx 的方式设置为 text/html;charset=utf-8。 4. 在 <%@ Page ... %> 中添加 ResponseEncoding="utf-8"。 5. 将字符串插入 HttpUtility.HtmlEncoded()。现在 ü 被转换为 ü(U+00C3 U+00BC)。 最后,我找到了 2 种可行的方法:
  1. Replacing non-ASCII characters with character references, such as &#252; This was okay in the 90's, not today.
  2. Adding a web.config file to the virtual directory, with this content:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.web>
        <globalization fileEncoding="utf-8"/>
      </system.web>
    </configuration>
    

如果没有设置fileEncoding,ASP.NET解析器将读取.aspx文件并在不尝试推断文件编码的情况下破坏每个非ASCII字符。这只是您这些专业人士已经学会了如何生存,还是我错过了什么?在.aspx页面上处理“国际”字符的方法是使用带有全球化设置的web.config文件吗?我不记得PHP有类似的问题,所以我很困惑为什么在ASP.NET中出现这种情况。


我发现了另一种不需要 web.config 文件就能使它正常工作的方法:将 .aspx 页面保存为带有字节顺序标记(BOM)的 UTF-8 编码。通常情况下,UTF-8 不需要 BOM,因为字节顺序已经隐含在编码中了,但是微软公司一直要求使用它,这可能是正确的做法,因为这样可以更可靠地推断文件编码方式。我想这可能是我正在寻找的解决方案,但仍然欢迎评论。 - Gustaf Liljegren
你应该考虑安装Microsoft Web平台安装程序,并使用IIS Express 7.5和Web Matrix或VS 2010 Express。 - Nikola Sivkov
2个回答

4

要使用非ASCII字符,您需要有两个东西。通过选择UTF-8编码来保存文件,并确保在您的web.config中设置了这些设置。

<globalization requestEncoding="utf-8" responseEncoding="utf-8"  fileEncoding="utf-8" />
请注意ASP.NET中始终存在web.config。有一个全局的配置文件,也具有这些设置,存储在asp.net目录下 {drive:}\WINDOWS\Microsoft.NET\Framework\{version}\CONFIG\,以及您的项目中的web.config。有时候,全局的配置文件会从当前国家/地区设置编码。这种情况下,您需要在您的项目中将其设置为UTF-8。 您已经找到了所有这些,我只是指出三个设置:
  1. 使用Unicode保存您的文件。
  2. 设置requestEncoding="utf-8"
  3. 设置responseEncoding="utf-8"

这个没有起作用。在我添加了fileEncoding之后它就可以工作了。 <globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" /> - bh_earth0

0

你有三个选项。

选项1 - 对于所有不符合ASCII标准的字符,要么将它们实体编码,要么用看起来类似的ASCII字符替换。这种方法容易出错且难以维护。下一次你需要加入大段文本时,可能会忘记检查其中包含的部分,导致它再次“看起来像垃圾”。

选项2 - 将.aspx文件保存为“带BOM的UTF-8”格式。这样的文件可以自动正确处理 - 这在web.config文件的system.web/globalization部分的fileEncoding属性的描述中有说明。但这种方法也难以维护 - 下一次你重新保存文件时,如果没有BOM,它又会“看起来像垃圾”,而你可能没有注意到。当你添加新的.aspx文件时,你必须检查它们是否也保存为“带BOM的UTF-8”格式。这种方法容易出错 - 例如,某些文件比较工具默认情况下不显示添加/删除BOM。

选项3 - 确保文件保存为 "UTF-8" 或 "UTF-8 with BOM",同时设置 system.web/globalization 部分的 fileEncoding 属性为 utf-8。此属性的默认值为 "单字节字符编码",因此以 UTF-8 保存的非 ASCII 字符文件处理不当,结果看起来像垃圾。这是最可维护的方法 - 它易于查看和验证,并且在重新保存文件时不会随机中断。 fileEncoding 是三个 ???Encoding 属性中唯一默认为 "单字节字符编码" 的属性 - responseEncodingrequestEncoding 默认为 utf-8,因此在大多数情况下无需更改(或设置)它们,通常设置 fileEncoding 就足够了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,