我是否需要web.config用于非ASCII字符?

时间:2012-05-13 13:54:04

标签: asp.net encoding utf-8

尝试制作我的第一个ASP.NET页面。在XP上获得IIS 5.1,配置为运行.NET 4.创建一个新的虚拟目录并添加.aspx文件。浏览文件时,非ASCII字符已损坏。例如,ü(U + 00FC)被转换为U(U + 00C3 U + 00BC),这就是我不能得到的这是UTF-8等价物。

我尝试了各种方法:

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

    <meta charset="UTF-8">

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

  4. 我将ResponseEncoding="utf-8"添加到<%@ Page ... %>
  5. 我在HttpUtility.HtmlEncoded()中插入了字符串。现在ü被转换为U(U + 00C3 U + 00BC)。
  6. 最后,我找到了两种方法:

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

      <?xml version="1.0" encoding="utf-8"?>
      <configuration>
        <system.web>
          <globalization fileEncoding="utf-8"/>
        </system.web>
      </configuration>
      
    3. 如果没有fileEncoding设置,ASP.NET解析器将读取.aspx并破坏每个非ASCII字符,而不尝试推断文件编码。这只是你们专业人士学到的东西,还是我错过了什么? web.config文件是否具有全球化设置 方式来处理.aspx页面上的“国际”字符?我不记得在PHP中遇到过类似的问题,所以我很困惑为什么会出现这种问题。

2 个答案:

答案 0 :(得分:3)

要使用非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”

答案 1 :(得分: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”或“带有BOM的UTF-8”,同时将web.config的fileEncoding部分的system.web/globalization属性设置为utf-8。此属性的默认值为“单字节字符编码”,因此将非ASCII字符另存为UTF-8的文件处理不当,结果“看上去很垃圾”。这是最可维护的方法-重新保存文件时,很容易看到,也很容易验证,并且不会随机破坏。 fileEncoding是三个???Encoding属性中唯一的一个,默认为“单字节字符编码”-responseEncodingrequestEncoding默认为utf-8,因此在大多数情况下无需更改(或设置)它们,设置fileEncoding通常就足够了。