Asp.net 非ASCII字符是否需要web.config?

Asp.net 非ASCII字符是否需要web.config?,asp.net,.net,iis,encoding,utf-8,Asp.net,.net,Iis,Encoding,Utf 8,正在尝试创建我的第一个ASP.NET页面。在XP上获得了IIS 5.1,配置为运行.NET 4。创建了一个新的虚拟目录并添加了一个.aspx文件。浏览文件时,非ASCII字符已损坏。例如,anü(U+00FC)被转换为ü(U+00c3u+00BC),这是I-don-not-get-this-is-UTF-8的等价物 我尝试了各种方法来利用这一点: 我确保.aspx文件确实编码为UTF-8 我设置元标记: 我将虚拟目录设置为handle.aspx为text/html;IIS中HTTP头>文件类

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

我尝试了各种方法来利用这一点:

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

  • 我将虚拟目录设置为handle.aspx为
    text/html;IIS中HTTP头>文件类型下的charset=utf-8

  • 我在
    中添加了
    ResponseEncoding=“utf-8”
  • 我在
    HttpUtility.HtmlEncoded()
    中插入了字符串。现在,ü被转化为ü(U+00C3 U+00BC)
  • 最后,我找到了两种行之有效的方法:

  • 用字符引用替换非ASCII字符,如
    和#252这在90年代还行,而不是今天
  • 将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会出现这种情况。

    要使用非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个设置:

  • 使用unicode保存文件
  • 设置requestEncoding=“utf-8”
  • 设置responseEncoding=“utf-8”

  • 你有三个选择

    选项1-实体对所有不符合ASCII的字符进行编码,或将其替换为外观类似的ASCII等效字符。这很容易出错,而且很难维护。下一次你必须合并一个大的文本块时,你可能会忘记检查包含的文本块,它再次“看起来像垃圾”

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


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

    我找到了另一种不使用web.config文件的方法:将.aspx页面保存为带有字节顺序标记(BOM)的UTF-8。一般来说,UTF-8不应该需要BOM,因为字节顺序在编码中是隐式的,但微软有一个传统要求它,这可能是正确的做法,因为它使推断文件编码更加可靠。我猜这是我正在寻找的解决方案,但是评论仍然是受欢迎的。你应该考虑安装微软Web平台安装程序,使用IIS Express 7.5和WEB矩阵或VS 2010 Express没有工作。在我添加了文件编码之后,它工作了。