7

尝试制作我的第一个 ASP.NET 页面。在 XP 上安装了 IIS 5.1,配置为运行 .NET 4。创建了一个新的虚拟目录并添加了一个 .aspx 文件。当我浏览文件时,非 ASCII 字符已损坏。例如,将 ü (U+00FC) 转换为 ü (U+00C3 U+00BC),这是 I-don't-get-this-is-UTF-8 等价物。

我尝试了各种方法来利用它:

  1. 我确保 .aspx 文件确实被编码为 UTF-8。
  2. 我设置了元标记:

    <meta charset="UTF-8">

  3. text/html;charset=utf-8我将虚拟目录设置为在 IIS 中的 HTTP 标头 > 文件类型下处理 .aspx 。

  4. 我添加ResponseEncoding="utf-8"<%@ Page ... %>.
  5. 我将字符串插入HttpUtility.HtmlEncoded(). 现在 ü 被转换为 ü (U+00C3 U+00BC)。

最后,我找到了两种有效的方法:

  1. 用字符引用替换非 ASCII 字符,例如&#252;这在 90 年代还可以,而不是今天。
  2. 将 web.config 文件添加到虚拟目录,其中包含以下内容:

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

如果不fileEncoding进行设置,ASP.NET 解析器将读取 .aspx 并破坏每个非 ASCII 字符,而不会尝试推断文件编码。这只是你的专业人士已经学会忍受的东西,还是我错过了什么?具有全球化设置web.config 文件是处理 .aspx 页面上的“国际”字符的方式吗?我不记得 PHP 有过类似的问题,所以我很困惑为什么 ASP.NET 会出现这种问题。

4

2 回答 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。

您已经找到了所有这些,我只是指出了 3 个设置:

  1. 使用 unicode 保存文件。
  2. 设置 requestEncoding="utf-8"
  3. 设置 responseEncoding="utf-8"
于 2012-05-13T16:05:59.270 回答
0

你有三个选择。

选项 1 - 要么对所有不适合 ASCII 的字符进行实体编码,要么将它们替换为外观相似的 ASCII 等价物。这是容易出错且难以维护的。下次您必须合并一大段文本时,您可能会忘记检查包含的部分,并且它再次“看起来很垃圾”。

选项 2 - 将 .aspx 保存为“带有 BOM 的 UTF-8”。此类文件会自动正确处理 - 在web.config 部分的fileEncoding属性描述中记录。system.web/globalization这也很难维护 - 下次您将文件重新保存为“UTF-8”(没有 BOM)时,它再次“看起来很垃圾”,它可能会被忽视。当您添加新的 .aspx 文件时,您必须检查它们是否也保存为“带有 BOM 的 UTF-8”。这种方法容易出错 - 例如,一些文件比较工具不显示添加/删除 BOM(至少在默认设置下)。

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

于 2020-03-02T09:32:38.397 回答